大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
使用opencv实现matlab中的imfill填充孔洞功能,整体思路如下:
1. 首先给原始图像四周加一圈全0,并保存为另一幅图像
2. 使用floodFill函数给新图像进行填充,种子点设置为Point(0, 0),填充颜色为全白。因为原始图像四周加了一圈0,因此使用floodFill填充之后,整个图像除了原始图像中内部的点是黑色之外其他地方全是白色。
3. 将填充之后的图像颜色反转,再剪裁成原始图像大小。此时这张图像除了内部需要填充的地方是白色之外其他地方都是黑色。
4. 最后将新图像和原始图像取个并集,完成。
代码如下:
/**
\brief 填充二值图像孔洞
\param srcimage [in] 输入具有孔洞的二值图像
\param dstimage [out] 输出填充孔洞的二值图像
\return void
*/
void imfill(Mat srcimage, Mat &dstimage)
{
Size m_Size = srcimage.size();
Mat temimage = Mat::zeros(m_Size.height + 2, m_Size.width + 2, srcimage.type());//延展图像
//imshow(“temimage”, temimage);
srcimage.copyTo(temimage(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)));
floodFill(temimage, Point(0,0), Scalar(255));
//imshow(“temimage”, temimage);
//waitKey(0);
Mat cutImg;//裁剪延展的图像
temimage(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)).copyTo(cutImg);
dstimage = srcimage | (~cutImg);
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194289.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...