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 + VS2015Test-1
【原图 Sherlock Holmes】【处理结果1】
Test-2
【原图 Dr. John H. Watson】【处理结果2】
测试集
http://movie.mtime.com/126627/posters_and_images/productionphoto/hot.html(全文完)
相关文章推荐
- python中使用OpenCV进行人脸检测的例子
- opencv 做人脸识别 opencv 人脸匹配分析
- 使用opencv拉伸图像扩大分辨率示例
- Android Studio中配置OpenCV库开发环境的教程
- 基于C++实现kinect+opencv 获取深度及彩色数据
- visual studio 2012安装配置方法图文教程 附opencv配置教程
- OpenCV 2.4.3 C++ 平滑处理分析
- Python中使用OpenCV库来进行简单的气象学遥感影像计算
- 利用Python和OpenCV库将URL转换为OpenCV格式的方法
- python结合opencv实现人脸检测与跟踪
- Python环境搭建之OpenCV的步骤方法
- Python+Opencv识别两张相似图片
- Python实现OpenCV的安装与使用示例
- 在树莓派2或树莓派B+上安装Python和OpenCV的教程
- opencv-python学习一--人脸检测
- Android Studio配置Opencv环境
- 在Ubuntu上安装OpenCV3.0和Python-openCV的经历
- 使用 Java 开发 OpenCV 应用
- OpenCV配置,从来没有这么简单!
- ubuntu下opencv和qt的安装配置