Оборудование для опытов с техническим зрением - web-камера Logitech HD Webcam C270

Оборудование предоставлено компанией Farnell, за что ей (и лично Ryan Gibson) большое спасибо!


Итак, мне в руки попала камера Logitech HD Webcam C270

* интерфейс USB 2.0
* встроенный микрофон
* длина кабеля — 1.5 м

Параметры изображения:
* Разрешение видео: 1280x720
* Интерполированное разрешение фотографий 3 млн пикс.

ОС
* Windows XP SP2/Vista/7
Поддерживает UVC (USB Video Class — USB Device Class Definition for Video Devices),
Device ID 046d:0825 Logitech HD Webcam C270

а следовательно должно без проблем работать под Linux (даже под OpenWRT на Wi-Fi-роутере D-Link DIR-320 )

Качество картинки с камеры заметно лучше, чем с более дешёвых веб-камер, которые я использовал до сих пор (например, почти незаметна дисторсия).
Что даёт надежду на возможность более надёжной и стабильной работы алгоритмов компьютерного зрения.

Посмотрим работу камеры под OpenCV через интерфейс С++.

//
// тестирование видеозахвата OpenCV через интерфейс C++
//
// http://robocraft.ru
//

#include "opencv2/opencv.hpp"

int main(int argc, char* argv[])
{
	cv::VideoCapture cap(0); // откроем камеру по-умолчанию
	if(!cap.isOpened())		 // успешно?
	{
		std::cout<<"[!] Error: cant open camera!"<<std::endl;
		return -1;
	}
	cv::Mat gray;
	cv::Mat edges;
	cv::namedWindow("frame");
	cv::namedWindow("edges");
	while(1)
	{
		cv::Mat frame;
		// у VideoCapture перегружен оператор >> ,который можно использовать для считывания кадра
		cap >> frame; // получаем новый кадр
		cv::imshow("frame", frame);		// показываем картинку
		cv::cvtColor(frame, gray, CV_BGR2GRAY); // конвертируем в градации серого
		cv::GaussianBlur(gray, gray, cv::Size(7,7), 1.5, 1.5); // размытие (фильтром Гаусса)
		cv::Canny(gray, edges, 0, 30);	// детектор границ Кенни
		cv::imshow("edges", edges);		// показываем картинку
		int key = cv::waitKey(33);
		if(key == 27) //ESC
			break;
		else if(key == 13) // Enter
		{
			// сохраним кадр в файл
			cv::imwrite("frame.jpg", frame);
			cv::imwrite("edges.jpg", edges);
			std::cout<<"[i] Saved."<<std::endl;
		}

	}
	// камера будет автоматически освобождена в деструкторе VideoCapture
	return 0;
}

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



Как видите, программная часть существенно не изменилась и фактически является обёрткой вокруг тех же Cи-шных функций.
bool VideoCapture::open(int device)
{
    cap = cvCreateCameraCapture(device);
    return isOpened();
}

Одно из удобств C++ -го интерфейса в том, что не приходится заботиться об освобождении ресурсов, т.к. это осуществляется автоматически в деструкторах объектов.

продолжение следует...

Ссылки:
Farnell
Logitech HD Webcam C270
ru.farnell.com/logitech
Linux UVC driver and tools
en.wikipedia.org/wiki/USB_video_device_class
  • +1
  • 12 января 2012, 19:51
  • noonv

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

RSS свернуть / развернуть
+
0
Качественно, фирмА!
avatar

SinauRus

  • 12 января 2012, 21:18

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