Здравствуйте! У меня два вопроса!
Я пишу программу которая на данный момент должна находить в полез рения камеры две окружности и вычислять расстояние между их центрами.
В статике я все сделал, использовал для этого версию openCV 1.1 и Visual Studio 6.
Затем нужно было подключать камеру. Поствил Visual Studio 2008, к ней openCV 2.2. Камеру подключал через VideoInput из библиотеки openCV. Сделал оконное приложение.
Все работает хорошо. Затем решил сделать вызов окна настройки камеры через драйвер VI.showSettingsWindow(device1); окно появляется.
Вопрос 1!! Пробовал с встроенной камерой на ноутбуке, все прекрасно. Подключил внешнюю Genius iLook 300 окно настройки появляется но как только их начинаешь менять программа зависает. Настройки можно поменять если открыть постороннюю программу для камеры и там залезть в настройки и сохранить. Собственно вопрос! было ли у кого то такое и связано ли это только с драйвером камеры?
Вопрос 2. Не могу перегнать кадр в оттенки серого с помощью функции cvCvtColor. Компилятор ругается. Вот код функции
//ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
IplImage* image = 0; //куда сохраняем кадр дл отображения
videoInput VI; //объект videoinput
int device1=0; // первое найденое видеоустройсво из списка
bool STARTVIDEO=true; //переменная для закрытия окна opnCV
// проверяется в конце функции void CopenCVWindowsDlg::OnBnClickedStart
//====================================================================
void CopenCVWindowsDlg::OnBnClickedStart()
{
IplImage* IMGgray = 0;
// получение списка доступных видеоустройств, возвращается число устройств
int numDevices = VI.listDevices();
// частота кадров
VI.setIdealFramerate(device1, 20);
// указываем разрешение
VI.setupDevice(device1, 550, 400, VI_COMPOSITE);
//VI.showSettingsWindow(device1); // показать окошко настроек камеры
// создаём картинку нужного размера
image = cvCreateImage(cvSize(VI.getWidth(device1),VI.getHeight(device1)), IPL_DEPTH_8U, 3);
IMGgray= cvCreateImage(cvSize(VI.getWidth(device1),VI.getHeight(device1)), IPL_DEPTH_8U, 3);
cvNamedWindow("SEARCH CICLE OPENCV", CV_WINDOW_AUTOSIZE);
cvMoveWindow("SEARCH CICLE OPENCV",400 , 100); //подвинем окошко что бы не загораживал форму
// программы
cvNamedWindow("gray", CV_WINDOW_AUTOSIZE);
while(1){
if (VI.isFrameNew(device1))
{
// первый параметр - индекс видеоустройсва
// второй - указатель на буфер для сохранения данных
// третий - флаг, определяющий менять ли местами B и R -составляющий
// четвёртый - флаг, определяющий поворачивать картинку или нет
VI.getPixels(device1, (unsigned char *)image->imageData, false, true); // получение пикселей в BGR
cvCvtColor(image,IMGgray,CV_RGB2GRAY);
//
// здесь уже можно работать с картинкой
// с помощью функций OpenCV
//
// показываем картинку
cvShowImage("SEARCH CICLE OPENCV", image);
cvShowImage("gray", IMGgray);
}
char c = cvWaitKey(33);
if (c == 27)
{ // ESC
break;
}
if (STARTVIDEO==false)
{//если флаг будет "false" значит нужно выйти
//из цикла и закрыть окно opnCV
STARTVIDEO=true;
break;
}
}
// освобождаем ресурсы
cvReleaseImage(& image);
cvReleaseImage(& IMGgray);
cvDestroyWindow("SEARCH CICLE OPENCV");
cvDestroyWindow("gray");
// останавливаем видеозахват
VI.stopDevice(device1);
}
Вот что пишет компилятор
Compiling...
openCV WindowsDlg.cpp
c:\opencv2.2\include\opencv\opencv2\flann\logger.h(66) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(237) : see declaration of 'fopen'
Linking...
openCV WindowsDlg.obj : error LNK2001: unresolved external symbol _cvCvtColor
C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\openCV Windows UIM\Debug\openCV Windows.exe : fatal error LNK1120: 1 unresolved externals
Наконец вопрос)) Кто знает как это исправить или может есть другие пути для преобразования цветного в оттенки серого. Это нужно для использования функции openCV cvHoughCircles()