Это должно быть легко. У меня есть видео поток с моей веб-камеры. Я просто играю с преобразованием изображений и т. Д. Я хотел бы иметь возможность просматривать исходные изображения (видеовход) в одном окне и преобразованное видео в другом. Проблема в том, что как только я начинаю захватывать видео вместо отдельных изображений, в исходном окне видео отображается преобразованное видео. Я не понимаю почему.
cvNamedWindow("in", CV_WINDOW_AUTOSIZE);
cvNamedWindow("out", CV_WINDOW_AUTOSIZE);
CvCapture *fc = cvCaptureFromCAM(0);
IplImage* frame = cvQueryFrame(fc);
if (!frame) {
return 0;
}
IplImage* greyscale = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);
IplImage* output = cvCreateImage(cvGetSize(frame),IPL_DEPTH_32F , 1);
while(1){
frame= cvQueryFrame(fc);
cvShowImage("in", frame);
// manually convert to greyscale
for (int y = 0; y < frame->height; y++) {
uchar* p = (uchar*) frame->imageData + y* frame->widthStep; // pointer to row
uchar* gp = (uchar*) greyscale->imageData + y*greyscale->widthStep;
for(int x = 0; x < frame->width; x++){
gp[x] = (p[3*x] + p[3*x+1] + p[3*x+2])/3; // average RGB values
}
}
cvShowImage("out", greyscale);
char c = cvWaitKey(33);
if (c == 27) {
return 0;
}
}
В этом простом примере оба видеопотока в конечном итоге отображаются в оттенках серого ... Значения указателя и визуальные данные для кадров и оттенков серого совершенно разные. Если я перестану отображать оттенки серого в окне «out», то рамка отобразится в цвете.
Кроме того, если я продолжу и применю операцию Собеля к изображению в оттенках серого и выведу результат в виде «out», то в обоих окнах «in» и «out» будет показано изображение Sobel!
Есть идеи?