【问题标题】:opencv: How to fill the area/edge outside a regionopencv:如何填充区域外的区域/边缘
【发布时间】:2015-04-25 22:28:21
【问题描述】:

下图仅包含阈值处理后的黑白像素。我在这张图片上画了一个灰色的旋转矩形。现在我想计算这个旋转矩形内的黑色像素数,但不包括白色矩形外的黑色像素(即白色矩形内的像素数)。

最好的方法是什么?我应该用白色像素填充白色矩形之外的区域吗?欢迎提出任何建议。

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    如果您知道要搜索的区域的角度和大小,则可以使用以下技术将其从图像中剪掉:

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

    (我知道它的 Python,但有一个 c++ 等价物)

    编辑

    您可以使用此代码返回并打印每个像素的值,以便了解返回的值类型(如果是二进制图像,则应为 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));
    

    一旦您获得这些值,可能会创建一个计数器,每当像素的值超过某个阈值时,该计数器就会增加

    【讨论】:

    • 您是否看到旋转的灰色矩形和白色矩形之外有一些黑色像素?我想在计算黑色像素的数量时排除它们——这是我的关键问题
    • 将矩形缩小 5% 左右,使其紧贴图像的白色部分
    • 或者更确切地说,减少矩形的边,直到边缘周围没有黑色像素,您可以使用我的答案中的代码检查边缘像素,然后将其更改为从0-img.width、0-img.length、img.width-img.length和img.lenth-img.width
    • 旋转矩形内白色矩形周围的黑色像素数量可能会有所不同,并且可能处于不同的角度(即更多的黑色像素)。除了裁剪旋转矩形周围的每一边之外,还有什么更好的方法吗?
    • 试试我的第二条评论,逐渐缩小它,直到边缘不再有黑色像素。
    猜你喜欢
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2013-05-10
    • 2018-09-24
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多