您的位置:首页 > 运维架构

opencv 人像检测 + Holes填充

2017-01-14 21:05 381 查看

人像检测 + Holes填充步骤

读入图像

imread()
;

将图像转为灰度图

cvtColor()
;

canny算子边缘检测

canny()
;

膨胀操作, 填充边缘缝隙

dilate()
;

Holes填充

自定义Holes填充函数
;

示例代码

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <vector>

#define zoom 3 // 缩放因子, 将大图像缩小 n 倍显示

using namespace cv;
using namespace std;

// 填充holes
void fillHole(const Mat srcBw, Mat &dstBw);

int main()
{
// 【1】读入图像
Mat srcImage;
srcImage = imread("imagename");
if (!srcImage.data) { //处理错误
cout << "读取图片错误!" << endl;
system("pause");
return false;
}

//【2】将图片转为灰度图
cvtColor(srcImage, srcImage, COLOR_BGR2GRAY);

Mat temp;
temp = srcImage;
resize(temp, temp, Size(temp.cols / zoom, temp.rows / zoom), (0, 0), (0, 0), 3);
imshow("[灰度图]", temp);

// 【3】canny算子边缘检测
Mat edge;
blur(srcImage, edge, Size(3, 3));//3x3内核降噪
Canny(srcImage, edge, 150, 100, 3);
temp = edge;
resize(edge, temp, Size(temp.cols / zoom, temp.rows / zoom), (0, 0), (0, 0), 3);
imshow("[canny算子边缘检测]", temp);

//【4】膨胀操作, 填充边缘缝隙
Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
for (int i = 0;i < 3;i++) {
dilate(edge, edge, element);
}
temp = edge;
resize(edge, temp, Size(temp.cols / zoom, temp.rows / zoom), (0, 0), (0, 0), 3);
imshow("[膨胀操作效果图]", temp);

// 【5】Holes填充
for (int i = 0;i < 10;i++) // 填充10次
{
fillHole(edge, edge);
}
temp = edge;
resize(edge, temp, Size(temp.cols / zoom, temp.rows / zoom), (0, 0), (0, 0), 3);
imshow("[Holes填充图]", temp);

waitKey(0); // 等待按键结束
return 0;
}

// 填充Holes
void fillHole(const Mat srcBw, Mat &dstBw)
{
Size m_Size = srcBw.size();
Mat Temp = Mat::zeros(m_Size.height + 2, m_Size.width + 2, srcBw.type());//延展图像
srcBw.copyTo(Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)));

floodFill(Temp, Point(0, 0), Scalar(255));

Mat cutImg;//裁剪延展的图像
Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)).copyTo(cutImg);

dstBw = srcBw | (~cutImg);
}


测试

编译环境: opencv 3.2.0 + VS2015

Test-1

【原图 Sherlock Holmes



【处理结果1】



Test-2

【原图 Dr. John H. Watson



【处理结果2】



测试集

http://movie.mtime.com/126627/posters_and_images/productionphoto/hot.html

(全文完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv