孔洞修补专题
目录
1.图像中的孔洞
这里的孔洞,指在白色区域以内的黑色区域,详见下图。
2.处理前后图像展示
图像处理前
图像处理后
3.代码展示
#include <cv.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
#include <string>
#include <cstring>
#include <vector>
#include <time.h>
#include <windows.h>
#include <iostream>
#include <algorithm>
using namespace std;
using namespace cv;
void fillHole(Mat& dst)
{
Size m_Size = dst.size();
Mat Temp = Mat::zeros(m_Size.height + 2, m_Size.width + 2, dst.type());//延展图像
dst.copyTo(Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)));
cv::floodFill(Temp, Point(0, 0), Scalar(255));
Mat cutImg;//裁剪延展的图像
Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)).copyTo(cutImg);
cutImg = ~cutImg;
dst = dst |cutImg;
}
void main()
{
Mat src = imread("C:\\Users\\SYYSP\\Desktop\\hole.jpg");
Mat dst;
cvtColor(src, dst, CV_BGR2GRAY);
fillHole(dst);
imwrite("C:\\Users\\SYYSP\\Desktop\\RemoveTheHole.jpg",dst);
}