3. OpenCV шаг за шагом. Hello World.


1. OpenCV шаг за шагом. Введение.
2. OpenCV шаг за шагом. Установка.
3. OpenCV шаг за шагом. Hello World.

Напишем стандартный и такой долгожданный Hello World, используя библиотеку OpenCV:

Перейдём сразу к делу, т.е. к коду:

Единственное -не стоит пугаться непонятных функций, постепенно мы их все рассмотрим 😉

#include <cv.h>
#include <highgui.h>

int main( int argc, char** argv ) 
{
	// задаём высоту и ширину картинки
	int height = 620;
	int width = 440;
	// задаём точку для вывода текста
	CvPoint pt = cvPoint( height/4, width/2 );
	// Создаёи 8-битную, 3-канальную картинку
	IplImage* hw = cvCreateImage(cvSize(height, width), 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 Step By Step", pt, &font, CV_RGB(150, 0, 150) );

	// создаём окошко
	cvNamedWindow("Hello World", 0);
	// показываем картинку в созданном окне
	cvShowImage("Hello World", hw);
	// ждём нажатия клавиши
	cvWaitKey(0);
	
	// освобождаем ресурсы
	cvReleaseImage(&hw);
	cvDestroyWindow("Hello World");
	return 0;
}

Приведенный пример просто выводит окошко с надписью «OpenCV Step By Step» и после нажатия любой клавиши завершает работу.

Данный пример — это немного модифицированный Hello World из оригинального руководства от Intel-а 🙂

Разберём некоторые функции.

int cvNamedWindow( const char* name, int flags );

— создаёт окно, в которое мы будем выводить наше изображение.
Первый параметр — название окна
Второй — его размер, 0 — даёт возможность изменять размер окна во время выполнения программы, но обычно указывается флаг CV_WINDOW_AUTOSIZE, который указывает, что окно будет ровно тех же размеров, что и загружаемое в него изображение.

void cvShowImage( const char* name, const CvArr* image );

— эта функия собственно и отображает изображение в окне;
первый параметр — название окна для вывода картинки,
второй параметр — изображение для вывода.

int cvWaitKey( int delay=0 );

— эта функция останавливает программу и ожидает нажатия клавиши заданное число миллисекунд и продолжает программу, если ничего не нажато.
Если же, как в нашем случае, параметр функции равен нулю, тогда программа ожидает нажатия клавиши и только потом продолжает работу.

Стандарный пример использования этой функции в цикле обрабоки видеоданных с камеры:

char c = cvWaitKey(33);
if (c == 27) { // если нажали ESC - выходим из цикла
    break;
}
void cvReleaseImage( IplImage** image );

— функция освобождает память, выделенную под изображение и устанавливает указатель в NULL.

void cvDestroyWindow( const char* name );

— эта функция закрывает окно и освобождает выделенную память.

Читать далее: 4. OpenCV шаг за шагом. Загрузка картинки


0 комментариев на «“3. OpenCV шаг за шагом. Hello World.”»

  1. День добрый. Сделал всё согласно прошлому пункту (установка), скопипастил HelloWorld! функцию, MSVS выдает ошибки типа «ссылка на неразрешенный внешний символ _cvDestroyWindow в функции _wmain» для всех OpenCV’шных функций.
    Что делать?
    Среда MSVS C++ 9 2008, OpenCV 2.1.0

    • разумеется, можно использовать интерфейс С++, но я решил рассматривать интерфейс С, а С++-й использовать по необходимости.
      К тому же, большинство функций С++-го интерфейса которой просто вызывают C-ые методы.

    • а планируется обновления туториала под cv 4, где всю сишную апи выпилили?

    • В планах есть. Пока затрудняюсь сказать — когда дойдут руки.

  2. Подскажите пожалуйста всё вроде так сделал но почему то библиотеку не видит. «Запуск программы не возможен, так как на компьютере отсутствует cxcore200.dll. Попробуйте переустановить программу»

  3. Запуск программы невозможен, так как на компьютере отсутствует MSVCP110D.dll Попробуйте переустановить программу
    Что делать? Помогите пожалуйста.

  4. Здравствуйте, начал осваивать Opencv и сразу столкнулся с кучей проблем, неполучилось поставить под виндовс, вроде все делаешь по мануалу, а один фиг не работает =(, в итоге кое как поставил на убунту, этот проект вроде билдидся, но при запуске вылазит ошибка
    (Hello World:10523): Gtk-WARNING **: cannot open display:
    остальные проекты просто не компилируются(, хотя вставляю просто без изменений, самая расрпостранная ошибка
    invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
    очень прошу помощи, в программировании я не сильно разбираюсь, новичек, заранее благодарен.

    • в общем разобрался, это проблема эклипса, если зайти в папку с проектом и самостоятельно запустить то все работет,
      тут поподробнее немного

    • Приветствую, у меня та же проблема, но я не разобрался, можно поподробнее по этой фразе:

      «в общем разобрался, это проблема эклипса, если зайти в папку с проектом и самостоятельно запустить то все работет»

      Что значит зайта в папку с проектом и самостоятельно запустить?

    • надо зайти в папку где сохранен сам проект, у меня эта папка workspace/название проекта, далее в папку debug, и запустить исполнительный файл, если проект с ошибками то он не соберется. И файла исполнительного там не будет.

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение