洪水填充图像的图像处理

Posted

技术标签:

【中文标题】洪水填充图像的图像处理【英文标题】:Image Processing on flood fill image 【发布时间】:2016-03-15 13:00:04 【问题描述】:

我正在处理一个图像处理项目,在该项目中我用洪水填充了原始图像。

现在

    我需要去除这张图片中的噪点,即手部图像周围的白线。我想通过将这些白线合并到黑色背景色中来删除它们。

    我需要将洪水填充区域的灰色(值为127)更改为白色。请注意,背景颜色应保持黑色。


这是this question 的后续。图片是用this answer中的代码获取的。

【问题讨论】:

好吧,酷。到目前为止,您尝试了什么? 你在这张图片中注入了什么? 查看两种可能的解决方案: 1. 缩小图像。但是,它不会完全删除小功能。 2.先腐蚀,再膨胀。它将完全删除小于侵蚀/膨胀半径的特征。 【参考方案1】:

在您的问题中生成图像的代码可以在your previous question 中找到。

所以我们知道洪水填充区域的值为127


从这张图开始,你可以很容易的得到泛洪区域的掩码为:

Mat1b mask = (img == 127);

单通道掩码的值为黑色0 或白色255

如果想要彩色图片,需要创建一个和img一样大小的黑色初始化图片,并根据蒙版设置像素为你喜欢的颜色(这里是绿色):

// Black initialized image, same size as img
Mat3b out(img.rows, img.cols, Vec3b(0,0,0)); 

Scalar some_color(0,255,0);
out.setTo(some_color, mask);

参考代码:

#include <opencv2/opencv.hpp>
using namespace cv;

int main()

    Mat1b img = imread("path_to_floodfilled_image", IMREAD_GRAYSCALE);

    // 127 is the color of the floodfilled region
    Mat1b mask = (img == 127); 

    // Black initialized image, same size as img
    Mat3b out(img.rows, img.cols, Vec3b(0,0,0)); 

    Scalar some_color(0,255,0);
    out.setTo(some_color, mask);

    // Show results
    imshow("Flood filled image", img);
    imshow("Mask", mask);
    imshow("Colored mask", out);
    waitKey();

    return 0;

【讨论】:

谢谢。这个有效。你一直都很乐于助人。 请查看此评论下方的答案 我在新帖子中提出了这个问题。请检查一下 。 :) @JunaidSultan 我已经看到了,但我现在太忙了;D。另外,我认为乘法没有多大意义...... 那么你会建议哪种方法?

以上是关于洪水填充图像的图像处理的主要内容,如果未能解决你的问题,请参考以下文章

图像处理------泛洪填充算法(Flood Fill Algorithm) 油漆桶功能

如何使用opencv python在闭合曲线中正确填充颜色

在Gridview中更新图像的问题

洪水覆盖算法(Flood Fill):颜色填充

使 HTML5 画布填充高效

1062. 洪水填充(经典)