我有一个大小为92x112
的图像(cv :: Mat)我想用椭圆围绕此图像中的对象,然后只获得这些像素来创建另一个只包含该对象的图像。
我的意思是,用椭圆裁剪原始图像。 有可能吗?
我正在尝试绘制一个椭圆,但是椭圆不会绘制完整,但是:
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
。
有些想法?
答案 0 :(得分: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变量中,我有一个图像显示ROI带有椭圆,其余为黑色。
答案 1 :(得分:3)
没有直接支持非矩形ROI 但你可以使用一个掩码 - 见http://docs.opencv.org/doc/tutorials/core/mat-mask-operations/mat-mask-operations.html(不是直接循环但原始教程不存在)