2015-02-24 127 views
0

下图仅包含阈值后的黑白像素。我在这张图片的顶部画一个灰色的旋转矩形。现在我想对这个旋转的矩形内的黑色像素的数量进行计数,但不包括白色矩形 - 矩形外的黑色像素(即白色矩形内的像素的数量)。opencv:如何填充区域外的区域/边缘

这样做的最佳方法是什么?我应该用白色像素填充白色矩形外的区域吗?欢迎任何建议。

enter image description here

回答

1

如果你知道你要搜索的区域的角度和大小,你可以砍掉它使用这种技术的图像:

How to straighten a rotated rectangle area of an image using opencv in python?

(我知道它的Python的,但有一个C++当量)

EDIT

您可以使用此代码返回并打印出每个像素的值,让你可以在样你得到回值的想法(应该仅仅是0和1/255,如果二值图像)

for(int i=0; i<img.rows; i++) 
    for(int j=0; j<img.cols; j++) 
     std::cout<<"Value: "<<static_cast<int>(gray_image.at<uchar>(i,j)); 

一旦你得到这些值可能会做一个计数器,将增加每次像素的值超过一定的阈值

+0

您是否看到灰色旋转矩形和白色矩形之外有一些黑色像素?在计算黑色像素的数量时,我想排除它们 - 这是我的关键问题 – chesschi 2015-02-24 10:57:53

+0

使您的矩形变小5%左右,以便它对图像的白色部分很紧 – Aphire 2015-02-24 11:03:12

+0

或者准确地说,减少边直到边缘没有黑色像素为止,您可以使用我的答案中的代码检查边缘像素,只需更改它,以便从0-img.width,0- img.length,img.width - img.length和img.lenth-img.width – Aphire 2015-02-24 11:06:04