洪水填充图像的图像处理
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。另外,我认为乘法没有多大意义...... 那么你会建议哪种方法?以上是关于洪水填充图像的图像处理的主要内容,如果未能解决你的问题,请参考以下文章