Команда (фрилансеры)

Набираем команду фрилансеров, Вы:

  • Программист,
  • Дизайнер,
  • SEO-специалист,
  • Менеджер

Разработка на заказ

Наша команда фрилансеров выполнит
работы на заказ:

Создание и раскрутка сайтов
Разработка приложений (мобайл, десктоп, сервер)
Разработка игр (веб, мобайл, 3D)
Аутсорсинг, фриланс

Контакты
vk.com/sitev_ru
Skype: sitev.ru
E-mail: mike@sitev.ru
github.com/sitev

Рейтинг@Mail.ru

Besucherzahler
счетчик посещений
Сайт на C++
Наш сайт работает на C++ и это очень круто! =))

OpenCV примеры на С++

Давайте разберём несколько примеров использования библиотеки OpenCV.

Начнём с банального вывода текста на экран.

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
 
using namespace cv;
using namespace std;
 
int main(int argc, char** argv)
{
	int w = 600, h = 200; //размеры картинки
	Point pt = Point(100, 100); //точка, куда выводим

	IplImage* hw = cvCreateImage(cvSize(w, h), 8, 3); //создаём картинку
	cvSet(hw, cvScalar(0, 0, 0)); // заливаем чёрным цветом
	
	CvFont font;
	cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0, 0, 1, CV_AA); // инициализируем шрифт
	cvPutText(hw, "OpenCV for sitev.ru", pt, &font, CV_RGB(255, 0, 0)); // выводим на картинку текст

	namedWindow("sitev.ru", WINDOW_AUTOSIZE); // создаём окошко
	cvShowImage("sitev.ru", hw); // выводим картинку в окошко
	waitKey(0); // ждём любую клавишу

	// освобождаем ресурсы
	cvReleaseImage(&hw);
	cvDestroyWindow("sitev.ru");
	return 0;
}

Тут в принципе, всё просто: создаём пустую картинку, на неё выводим текст и затем эту картинку выводим в окошко.

Получается, что картинку мы уже выводить умеем. Какой же теперь пример OpenCV рассмотрим? Давайте теперь выведем сразу видео! Пробуем:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
 
using namespace cv;
using namespace std;
 
IplImage* frame = 0;

int main(int argc, char* argv[])
{
	char* filename = "test.avi";

	namedWindow("sitev.ru", CV_WINDOW_AUTOSIZE);
	CvCapture* capture = cvCreateFileCapture(filename); // инициализация захвата видео из файла

	while (1) {
		frame = cvQueryFrame(capture); // получить очередной кадр
		if (!frame) break;

		cvShowImage("sitev.ru", frame); // показываем кадр

		char c = waitKey(33);
		if (c == 27) break; // выходим по ESC 
	}

	// освобождаем ресурсы
	cvReleaseCapture(&capture);
	cvDestroyWindow("sitev.ru");
	return 0;
}

Получилось! Неплохо, неплохо... Продолжаем...

В OpenCV можно работать с интересующей нас прямоугольной областью изображения. По-английски звучит так: Region Of Interest (сокращённо ROI). Посмотрим на примере:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
 
using namespace cv;
using namespace std;
 
int main(int argc, char* argv[])
{
	char* filename = "lena.jpg";
	IplImage* image = cvLoadImage(filename, 1);

	namedWindow("sitev.ru", CV_WINDOW_AUTOSIZE);
	namedWindow("ROI", CV_WINDOW_AUTOSIZE);

	// задаём ROI
	int x = 250;
	int y = 250;
	int w = 100;
	int h = 100;
	
	int add = 100; // добавочная величина 

	cvShowImage("sitev.ru", image);
	cvSetImageROI(image, cvRect(x, y, w, h)); // устанавливаем ROI
	cvAddS(image, cvScalar(add), image); // добавить скалярную величину
	cvResetImageROI(image); // сбрасываем ROI
	cvShowImage("ROI", image); // показываем изображение

	waitKey(0);

	// освобождаем ресурсы
	cvReleaseImage(&image);
	cvDestroyAllWindows();
	return 0;
}

Функция cvAddS добавляет к пикселям изображения некую скалярную величину, выделяя цветом прямоугольник ROI. С этим понятно. А зачем нужна cvResetImageROI? Попробуйте её закомментировать, сами поймёте в чём прикол).

Ну и последний на сегодня пример, захват с помощью OpenCV видео с камеры:

#define _CRT_SECURE_NO_WARNINGS

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
 
using namespace cv;
using namespace std;
 
int main(int argc, char* argv[])
{
	VideoCapture cap(0); //открыть камеру по-умолчанию

	if (cap.isOpened() == false) {
		cout << "Cannot open the video camera" << endl;
		cin.get(); 
		return -1;
	}

	double w = cap.get(CV_CAP_PROP_FRAME_WIDTH); //получить ширину кадра
	double h = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //получить высоту кадра

	cout << "Resolution of the video : " << w << " x " << h << endl;

	string window_name = "My Camera Feed";
	namedWindow(window_name); 

	while (true) {
		Mat frame;
		bool success = cap.read(frame); // читаем кадр
		if (success == false) {
			cout << "Video camera is disconnected" << endl;
			cin.get();
			break;
		}

		imshow(window_name, frame); // показать кадр

		if (waitKey(10) == 27) {
			cout << "Esc key is pressed by user. Stoppig the video" << endl;
			break;
		}
	}

	return 0;
}

Мы рассмотрели несколько примеров использования OpenCV и при этом стали на шажок ближе к изучению компьютерного зрения. Но, к сожалению, (а может быть и к счастью) мы только в начале пути, продолжим и дальше двигаться в изучении этого направления!

P.S. На гитхабе github.com/sitev/opencv выложил исходники примеров. Там, кстати, есть такой проектик, называется opencv-tpl - шаблон приложение на OpenCV.


Отправить комментарий
Наш проект: язык Cj
Cj - язык программирования (C++ & Javascript)
Новый язык программирования, для разработки веб, мобайл, десктоп-приложений, игр... подробнее...

Хотите поддержать проект?

  • Оставляйте ссылки на наш сайт
  • Станьте спонсором проекта
подробнее...

Концепция SITEV.ru

SITEV.ru - это социальная сеть для ИТ-специалистов (программистов, дизайнеров, seo-специалистов, рекламных менеджеров, маркетологов), в том числе фрилансеров, бизнесменов... а также обычных пользователей, для которых и делается ИТ

Реклама


Поиск работы по всему миру