Cela devrait être facile. J'ai un flux vidéo venant de ma webcam. Je suis en train de jouer avec la transformation d'image, etc. J'aimerais pouvoir voir les images originales (entrée vidéo) dans une fenêtre et la vidéo transformée dans une autre. Le problème est que, dès que je commence à capturer de la vidéo au lieu d'une seule image, la fenêtre vidéo d'origine affiche la vidéo transformée. Je ne comprends pas pourquoi.OpenCV affiche à la fois la vidéo entrante et la vidéo modifiée dans des fenêtres séparées
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;
}
}
Dans cet exemple simple, les deux flux vidéo finissent par apparaître ... Les valeurs de gris de pointeur et imageData pour cadre et sont totalement différentes nuances de gris. Si j'arrête d'afficher les niveaux de gris dans la fenêtre "out", alors l'image apparaîtra en couleur. En outre, si je continue et applique une opération Sobel sur l'image en niveaux de gris et affiche le résultat dans "out", les fenêtres "in" et "out" afficheront l'image Sobel!
Des idées?
Ok, n'oubliez pas d'accepter votre propre réponse lorsque vous le pouvez. – karlphillip