2011-03-05 3 views
3

J'ai une image (cv :: Mat) avec la taille de 92x112 Je veux entourer l'objet dans cette image avec une ellipse puis obtenir seulement ce pixels pour créer une autre image contenant uniquement l'objet. Je veux dire, recadrer l'image d'origine avec une ellipse. C'est possible?image de culture OpenCV avec ellipse

Je suis en train dessiner une ellipse, mais l'ellipse ne dessine pas complète, avec ce que:

ellipse(escalada, Point(92/2,112/2), Size(92/2*0.95,112/2*0.85), 0.0, 90.0, 0.0, Scalar(255,0,0), 3, 8); 

et a fait quelques essais avec cvSetImageROI pour recadrer l'image, mais cette méthode ne fonctionne qu'avec cvRect.

Une idée?

Répondre

4

je résous en utilisant ceci:

imagen = imread(nombre_imagen,0); //read image (grayscale) 
//Use old C interface 
IplImage *res,*roi; 
IplImage src(imagen); 
res = cvCreateImage(Size(imagen.rows,imagen.cols),8,1); 
roi = cvCreateImage(Size(imagen.rows,imagen.cols),8,1); 
cvZero(roi); 
cvEllipse(roi,cvPoint(src.width/2,src.height/2),cvSize(src.width/2*0.85,src.height/2*0.95),0.0,0.0,360.0,CV_RGB(255,255,255),-1,8,0); 

cvAnd(&src, &src, res, roi); 
cvReleaseImage(&roi); 

alors dans la variable i res ont une image montrant le retour sur investissement avec une ellipse et le reste en noir.

+0

Est-ce que filter2D et cvZero sont la même chose? Cause dans C++ objet Mat nous ne pouvons pas utiliser cvAnd. – Sohaib

+0

cvZero efface le tableau (la documentation actuelle d'OpenCV utilise cvSetZero) filter2D: Convoque une image avec le noyau. – matiasfh

+0

Désolé, je voulais dire cvAnd et filter2D. J'ai trouvé ma réponse il y a bitwise_and dans openCV pour l'API C++. – Sohaib