使用opencv实现matlab中的imfill填充孔洞功能
使用opencv实现matlab中的imfill填充孔洞功能,整体思路如下:
1.首先给原始图像四周加一圈全0,并保存为另一幅图像
2.使用floodFill函数给新图像进行填充,种子点设置为Point(0, 0),填充颜色为全白。因为原始图像四周加了一圈0,因此使用floodFill填充之后,整个图像除了原始图像中内部的点是黑色之外其他地方全是白色。
3.将填充之后的图像颜色反转,再剪裁成原始图像大小。此时这张图像除了内部需要填充的地方是白色之外其他地方都是黑色。
4.最后将新图像和原始图像取个并集,完成。
【使用opencv实现matlab中的imfill填充孔洞功能】代码如下:
/**
\brief填充二值图像孔洞
\paramsrcimage[in]输入具有孔洞的二值图像
\paramdstimage[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);
}
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Java|Java OpenCV图像处理之SIFT角点检测详解