2011-03-05 169 views
3

我有一個圖像(cv :: Mat)大小爲92x112我想用橢圓包圍此圖像中的對象,然後只獲得這個像素來創建另一個只包含對象的圖像。OpenCV裁剪圖像與橢圓

我的意思是,用橢圓裁剪原始圖像。 有可能嗎?

我想畫一個橢圓,但是橢圓不畫完整了,具有:

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); 

並取得了一定的測試與cvSetImageROI裁剪圖像,但這種方法僅適用於cvRect

有些想法?

回答

4

我解決了使用此:

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); 

然後在res變量i具有顯示ROI一個圖像與一個橢圓形和其餘的黑色。

+0

filter2D和cvZero是一回事嗎? 原因在C + + Mat對象我們不能使用cvAnd。 – Sohaib 2013-10-07 15:22:33

+0

cvZero清除數組(OpenCV的實際文檔使用cvSetZero)filter2D:將內核捲入圖像。 – matiasfh 2013-10-07 16:09:48

+0

對不起,我的意思是cvAnd和filter2D。 我發現我的答案是在C++ API的openCV中有bitwise_and。 – Sohaib 2013-10-07 16:13:34