CvRect值的变化未反映在图像中

时间:2011-09-27 02:20:53

标签: image-processing opencv

轮廓的最小边界矩形由OpenCv作为CvRect结构返回。我试图在原始图像上对应于此CvRect的子图像周围有 m 像素厚边距/边框,即代替组件的精确边界矩形(轮廓)我们得到更大的东西,包含组件及其周围的像素。

处理图像边界时,我使用以下代码来增加CvRect的大小,稍后应用CvSetImageROI()来获取子图像:

//making m px border around subimg
CvRect box_swt = box1;
box_swt.x = (box1.x)>m ? box1.x-m : box1.x;
box_swt.y = (box1.y)>m ? box1.y-m : box1.y;
box_swt.width = (box1.x + box1.width) < img->width-m ? box1.width+m : box1.width;
box_swt.height = (box1.y + box1.height) < img->height-m ? box1.height+m : box1.height;

此处,box1存储cvBoundingRect(ptr, 0)的返回值,其中ptr是指向检测到的轮廓的指针。

问题是所产生的子图像仅在上边界和左边界中较大,其他子图像保持不变。我没有得到一个在其所有边上都有均匀m像素厚边框的子图像。这种情况发生在所有情况下,而不仅仅是边界上的情况。有任何逻辑错误吗?

1 个答案:

答案 0 :(得分:0)

当你修改矩形的x和y时,你没有增加它的大小,只是移动它,然后你将宽度和高度增加到m。我想你想要的是将它增加2米以达到预期的效果。