CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

24. OpenCV шаг за шагом. Работа с камерой через библиотеку videoInput

1. OpenCV шаг за шагом. Введение.
2. Установка.
3. Hello World.
4. Загрузка картинки.
5. Вывод видео
6. Ползунок
7. Захват видео с камеры
8. Запись видео
9. События от мышки
10. Обработка изображения — сглаживание
11. Обработка изображения — изменение размеров
12. ROI — интересующая область изображения
13. Типы данных OpenCV
14. Матрица
15. Сохранение данных в XML
16. Генерация случайных чисел
17. Обработка изображения — морфологические преобразования
18. Обработка изображения — морфологические преобразования 2
19. Обработка изображения — заливка части изображения
20. Обработка изображения — альфа-смешивание
21. Обработка изображения — пороговое преобразование
22. Поиск объекта по цвету — RGB.
23. Поиск объекта по цвету. Цветовое пространство HSV.
24. Работа с камерой через библиотеку videoInput.

В шаге про захват видео с камеры я упомянул о том, что штатный захват не всегда срабатывает как нужно.
Например, он не хочет устанавливать частоту кадров.
Но под Windows есть замечательная библиотека videoInput, которая уже идёт в составе OpenCV, просто в OpenCV реализованы не все возможности этой библиотеки ;)

страничка библиотеки:
http://muonics.net/school/spring05/videoInput/

последняя версия — Version 0.1995 — Jan 2009 (35Mb — bin & src)

Можете скачать библиотеку или использовать файлы:
videoInput.h
videoInput.lib

, которые идут вместе с OpenCV.

Для работы с библиотекой в своём проекте нам нужно прописать пути к директориям файлов библиотеки в настройках своей IDE.

Предположим, Вы скачали архив с библиотекой и распаковали его в удобное для Вас место, например:
c:\DevTools\videoInput\


Прописываем пути до заголовочного файла (videoInput.h) и файла библиотеки (videoInput.lib):
C:\DevTools\videoInput\compiledLib\compiledByVS2008\include\

и
c:\DevTools\videoInput\compiledLib\compiledByVS2008\
соответственно.

При попытке слинковать программу вероятна ошибка, что не найдена библиотека atlthunk.lib

Это решается указанием в свойствах проекта не линковать эту библиотеку.
Для этого нужно перейти
Project–>Properties–>Linker->Command Line
и вставить строчку:
/NODEFAULTLIB:"atlthunk"


Пример получения видео с помощью videoInput.

//
// пример использования библиотеки видеозахвата videoInput
// http://muonics.net/school/spring05/videoInput/
//
// robocraft.ru
//

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

#ifdef _MSC_VER
// подключение библиотек под MS VC
# pragma comment(lib, "cxcore200.lib")
# pragma comment(lib, "cv200.lib")
# pragma comment(lib, "highgui200.lib")
# pragma comment(lib, "videoInput.lib")
#endif //#ifdef _MSC_VER

IplImage* image = 0;

int main(int argc, char* argv[])
{
	// создание объекта videoInput
	videoInput VI;

	// получение списка доступных видеоустройств, возвращается число устройств
	int numDevices = VI.listDevices();
	int device1=0; // первое найденое видеоустройсво из списка

	// частота кадров
	VI.setIdealFramerate(device1, 15);

	// указываем разрешение
	VI.setupDevice(device1, 1280, 960, VI_COMPOSITE);

	//VI.showSettingsWindow(device1); // показать окошко настроек камеры

	// создаём картинку нужного размера
	image = cvCreateImage(cvSize(VI.getWidth(device1),VI.getHeight(device1)), IPL_DEPTH_8U, 3);

	cvNamedWindow("capture", CV_WINDOW_AUTOSIZE);

	while(1){
		if (VI.isFrameNew(device1)){
			// первый параметр - индекс видеоустройсва
			// второй - указатель на буфер для сохранения данных
			// третий - флаг, определяющий менять ли местами B и R -составляющий
			// четвёртый - флаг, определяющий поворачивать картинку или нет
			VI.getPixels(device1, (unsigned char *)image->imageData, false, true); // получение пикселей в BGR

			//
			// здесь уже можно работать с картинкой
			// с помощью функций OpenCV
			//

			// показываем картинку
			cvShowImage("capture", image);
		}

		char c = cvWaitKey(33);
		if (c == 27) { // ESC
			break;
		}
	}

	// освобождаем ресурсы
	cvReleaseImage(& image);
	cvDestroyWindow("capture");

	// останавливаем видеозахват
	VI.stopDevice(device1);

	return 0;
}

скачать иcходник (24-vi.cpp)

Вот и всё! Теперь, если штатными средствами захватить видео не получается — можете попробовать поработать через эту библиотеку ;)

далее: 25. Обработка изображения — свёртка.

Ссылки:
http://muonics.net/school/spring05/videoInput/
http://opencv.willowgarage.com/wiki/DirectShow
  • +1
  • 14 января 2011, 10:47
  • noonv

Комментарии (14)

RSS свернуть / развернуть
+
0
шикарно помогло до этого использовал стандартные средства opencv либа пошла даже на visual studio 2010
avatar

tipabot

  • 7 марта 2011, 15:13
+
0
Zdrustviute otlichnaya rabota o4en pomogla, u menya zada4a sdelat` iskajonnoe video(v real`noe vremya), to est` s effect krivogo zerkala v Opencv naprimer vot takoe:
www.myvido1.com/QTIpEVatWOmF2RNpXTw0UP_-
P.S. eto doljno bit v real`nom vremeni, pomogite pojaluisto kto 4e znaet, rada budu luboi informasii i ssilki
avatar

Dinara

  • 4 декабря 2011, 22:02
+
0
videoInput без пинков не пошел… (OpenCV 2.2 и VS2010)
Вот нашел как пересобрать либу под VS2010. Помогло.
avatar

dkuznets

  • 18 декабря 2011, 08:22
+
0
Друзья, подскажите, а можно с помощью этой библиотеке эмулировать веб-камеру (необходим функционал захвата изображения рабочего стола, типа ManyCam, VCam)?
Или каким средствами это сделать? Возможно, есть решение получше, чем писать драйвер.
avatar

duke

  • 5 марта 2012, 15:13
+
0
библиотеки*
avatar

duke

  • 5 марта 2012, 15:16
+
0
Всем привет!
подскажите плиз заинклудил библиотеку, скачал уже для VS2010 но при компиляции пишет ошибку
1>d:\project\opencv_helloworld\opencv_helloworld\opencv_helloworld\opencv_helloworld.cpp(1): warning C4627: '#include <cv.h>': skipped when looking for precompiled header use
1> Add directive to 'StdAfx.h' or rebuild precompiled header
1>d:\project\opencv_helloworld\opencv_helloworld\opencv_helloworld\opencv_helloworld.cpp(2): warning C4627: '#include <highgui.h>': skipped when looking for precompiled header use
1> Add directive to 'StdAfx.h' or rebuild precompiled header
1>d:\project\opencv_helloworld\opencv_helloworld\opencv_helloworld\opencv_helloworld.cpp(3): warning C4627: '#include <videoInput.h>': skipped when looking for precompiled header use
1> Add directive to 'StdAfx.h' or rebuild precompiled header
1>d:\project\opencv_helloworld\opencv_helloworld\opencv_helloworld\opencv_helloworld.cpp(69): fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include «StdAfx.h»' to your source?
1>
1>Build FAILED.
подскажите куда копать, VC советует инклудить stdafx, после чего ошибок.
avatar

Taku

  • 9 августа 2013, 15:27
+
0
Всем привет!
в общем удалось мне подгрузить библиотеку, но экран все равно серый :(
avatar

Taku

  • 11 августа 2013, 08:13
+
0
Здравствуйте! А не подскажете как настроить выбор каналов видео? У меня 4-х канальный оцифровщик, и OpenCV и VideoInput видят только первый канал, а мне нужно чтобы все 4?
avatar

Danila24

  • 18 февраля 2014, 12:03
+
0
Эта библиотека только под Windows? В Linux ее можно использовать? Стандартными средствами, в Linux, изменить частоту кадров не получается =(
avatar

Trouyan

  • 25 июня 2014, 20:36
+
0
под Linux нужно работать через v4l2 (Video4Linux)
пример
avatar

noonv

  • 3 июля 2014, 00:05
+
0
Спасибо большое, очень внимаетльно просммотрел содержимое этого файла, но как Я понял это только класс для работы с этой библиотекой… примера так и не нашел.
Попробовал своими силами его одолеть, но пока без результатно… может найдется у вас пример для работы с этой библиотекой?
Ниже кидаю свой код(он не работает… такое чувство, что вылетает на инициализации т.к. ничего кроме консольного окна не наблюдаю):

#define LINUX
#define USE_V4L2_LIB
#define USE_OPENCV

#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#include <stdio.h>
#include "camera_v4l2.h"


int main(int argc, char *argv[])
{
    IplImage *pFrame;
    CameraV4L2 *pCapture;
    pCapture->init();

    cvNamedWindow("Test",CV_WINDOW_AUTOSIZE);

    while (1)
    {
        pFrame=pCapture->getFrame();
        cvShowImage("Test",pFrame);
        char key;
        key=cvWaitKey(33);
        if(key==27)
            break;

    }
    cvReleaseImage(&pFrame);
    cvDestroyWindow("Test");
    return 0;
}

avatar

Trouyan

  • 15 июля 2014, 17:47
+
0
Ругается на VS2015 что не может открыть videoInput.lib хотя все сделано как в инструкции, что делать?
avatar

Batradz

  • 5 ноября 2016, 14:38
+
0
На гитхабе выложен lib-файл только под VS2012.
avatar

admin

  • 5 ноября 2016, 14:44
+
0
Спасибо
avatar

Batradz

  • 5 ноября 2016, 15:00

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.