bonjour,

je débute en openCV et je sollicite votre aide pour un le problème suivant: j'ai une séquence video très simple : http://w.nguyen.free.fr/sequencevideo.avi.

je dois juste faire une detection de contour "en temps réel" de la vidéo. Là ou ça coince c'est que seul le le contour de la fenêtre est détecté et pas les contours de l'objet cible.
Déjà je transforme chaque frame de la video en image en nuance de gris 8 bits et j'applique la détection de contour, mais ça n'a pas l'air de fonctionner...

voici mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <cv.h>
#include <cvaux.h>
#include <highgui.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void main(int argc, char *argv[])
{
	/* Font */
	float vScale = 0.5;
	float hScale = 0.5;
	int lineWidth = 2;
	CvFont font;
	cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX, hScale,vScale,0,lineWidth);
 
	/* Variables */
	IplImage *newImg, *contourImg, *grayImg;
	CvCapture *sequenceVideo;
 
	//parametres pour la detection de contours
	CvMemStorage * storage = cvCreateMemStorage(0);
	CvSeq * contour = 0;
	int mode = CV_RETR_EXTERNAL;
	mode = CV_RETR_CCOMP; //detect both outside and inside contour
 
	/* Ouverture de la video */
	sequenceVideo = cvCaptureFromAVI(argv[1]);
 
	/* creation des fenetres */
	//cvNamedWindow(argv[1], CV_WINDOW_AUTOSIZE);
	//cvNamedWindow("gray", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("contour",CV_WINDOW_AUTOSIZE);
 
	while(cvGrabFrame(sequenceVideo))
	{
		storage = cvCreateMemStorage(0);
		contour = 0
 
		newImg = cvRetrieveFrame(sequenceVideo);
 
		//create a single channel 1 byte newImgage (i.e. gray-level newImgage)
		grayImg = cvCreateImage( cvSize(newImg->width, newImg->height), IPL_DEPTH_8U, 1 );
		//convert original color newImgage (3 channel rgb color newImgage) to gray-level newImgage
		cvCvtColor( newImg, grayImg, CV_BGR2GRAY );
 
		//make a copy of the original newImgage to draw the detected contour
		contourImg = cvCreateImage(cvGetSize(newImg), IPL_DEPTH_8U, 3);
		contourImg = cvCloneImage( newImg );
 
		//find the contour
		cvFindContours(grayImg, storage, &contour, sizeof(CvContour), mode, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
 
		//draw the contour
		cvDrawContours(contourImg, contour, CV_RGB(0, 255, 0), CV_RGB(0, 0, 255), 2, 2, 8);
 
		//cvShowImage(argv[1], newImg);
		cvShowImage( "contour", contourImg );
		//cvShowImage("gray", grayImg);
 
		cvWaitKey(1);
	}
 
	/* desallocation memoire */
	cvReleaseCapture(&sequenceVideo);
	cvDestroyWindow( argv[1] ); cvDestroyWindow( "contour" ), cvDestroyWindow( "gray" );
	cvReleaseImage( &newImg ); cvReleaseImage( &grayImg ); cvReleaseImage( &contourImg );
	cvReleaseMemStorage(&storage);
 
}
Si vous pouviez me donner des pistes pour résoudre ce problème je vous en serait très reconnaissant