一、分析

贴出应用图片以供直观了解

红色部分,因图而异(某些参数,根据图片的不同需要进行相应的修改)

二、代码

 #include "opencv2/opencv.hpp"
#include<iostream>
using namespace cv;
using namespace std; void main(){
Mat img=imread("E://9.jpg");
int thres_min=; //二值化最小阈值
if(!img.empty()){
//二值化
threshold(img, img, thres_min, , THRESH_BINARY);
imshow("img_thres",img);
//img备份
Mat copy=img.clone();//拷贝原图,且不会随着原图改变
cvtColor(copy,copy,CV_BGR2GRAY);//彩色图转灰度图
threshold(copy, copy, thres_min, , THRESH_BINARY_INV);//反转:白色变黑色,黑色变白色
imshow("copy", copy);
//查找copy的轮廓
vector<vector<Point>>contours;
findContours(copy, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
//将轮廓画在全黑图像上
Mat draw;
draw = Mat::zeros(img.size(), CV_32FC1);//定义一个img大小的全黑图像
drawContours(draw, contours, , Scalar(), -);
imshow("img2", draw);
//进行膨胀腐蚀操作
Mat dilated, eroded;
Mat kernel=getStructuringElement(MORPH_RECT,Size(,));//定义结构元素
dilate(draw, dilated, kernel, Point(-,-), );//膨胀两次
imshow("dilate", dilated);
erode(dilated, eroded, kernel, Point(-,-), );
imshow("erode", eroded);
//膨胀腐蚀相减
Mat diff;
absdiff(dilated, eroded, diff);
diff.convertTo(diff, CV_8UC1);//转换为单通道图(即灰度图)
imshow("diff", diff);
//在差异图diff中查找轮廓,然后在原图中绘制轮廓
vector<vector<Point>>contours2;
findContours(diff, contours2, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
drawContours(img, contours2, , Scalar(,,),-);//-1表示绘制轮廓内部,正数表示轮廓线条粗细
imshow("result", img);
}
waitKey();
destroyAllWindows();
}

轮廓的相关知识,后面会学到。

三、效果图

二值图如下

原图备份后反二值化阈值图copy,如下

copy的轮廓画在全黑图像上,如下

膨胀腐蚀如下

膨胀腐蚀相减(diff)如下

diff轮廓绘制在原图上,如下

其他效果图

绘制轮廓时,若继续选择-1(即绘制轮廓内部),会出现异常情况

将-1更改为轮廓线条粗细程度,则可以正确走出迷宫

opencv学习之路(16)、膨胀腐蚀应用之走迷宫的更多相关文章

  1. opencv学习之路(14)、形态学之膨胀腐蚀

    一.膨胀腐蚀概述(对高亮部分进行操作) 二.膨胀 三.腐蚀 四.代码 1.查看结构元素 #include<opencv2/opencv.hpp> #include<iostream& ...

  2. C++ Opencv 自写函数实现膨胀腐蚀处理

    一.膨胀腐蚀学习笔记 二.代码及结果分享 #include <opencv2/opencv.hpp> #include <iostream> using namespace s ...

  3. opencv学习之路(15)、形态学其他操作(开、闭、顶帽、黑帽、形态学梯度)

    一.形态学其他操作(用的不多,如果忘了也可以通过膨胀腐蚀得到相同效果) 1.开运算 2.闭运算 3.形态学梯度 4.顶帽 5.黑帽 #include "opencv2/opencv.hpp& ...

  4. opencv学习之路(37)、运动物体检测(二)

    一.运动物体轮廓椭圆拟合及中心 #include "opencv2/opencv.hpp" #include<iostream> using namespace std ...

  5. opencv学习之路(36)、运动物体检测(一)

    一.简介 二.背景减法 图片说明 #include "opencv2/opencv.hpp"using namespace cv; void main() { Mat img1 = ...

  6. opencv学习之路(40)、人脸识别算法——EigenFace、FisherFace、LBPH

    一.人脸识别算法之特征脸方法(Eigenface) 1.原理介绍及数据收集 特征脸方法主要是基于PCA降维实现. 详细介绍和主要思想可以参考 http://blog.csdn.net/u0100066 ...

  7. opencv学习之路(31)、GrabCut & FloodFill图像分割

    一.GrabCut 1.利用Rect做分割 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat ...

  8. opencv学习之路(26)、轮廓查找与绘制(五)——最小外接矩形

    一.简介 二.轮廓最小外接矩形的绘制 #include "opencv2/opencv.hpp" using namespace cv; void main() { //轮廓最小外 ...

  9. opencv学习之路(25)、轮廓查找与绘制(四)——正外接矩形

    一.简介 二.外接矩形的查找绘制 #include "opencv2/opencv.hpp" using namespace cv; void main() { //外接矩形的查找 ...

随机推荐

  1. 4.C#虚方法virtual详解

    C#虚方法virtual详解 在C++.Java等众多OOP语言里都可以看到virtual的身影,而C#作为一个完全面向对象的语言当然也不例外. 虚拟函数从C#的程序编译的角度来看,它和其它一般的函数 ...

  2. for in //for of //forEach //map三种对比

    遍历Array可以采用下标循环,遍历Map和Set就无法使用下标.为了统一集合类型,ES6标准引入了新的iterable类型,Array.Map和Set都属于iterable类型. 具有iterabl ...

  3. 从零开始一起学习SLAM | SLAM有什么用?

    SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻译为:同时定位与建图.同时定位与地图构建. 「同时定位与地图构建」这几个词,乍一听起来非 ...

  4. cocos2d JS-(JavaScript) 使用特权方法的例子

    function User(name,age) { var year = (new Date()).getFullYear() - age; this.getYearBorn = function ( ...

  5. 本地tp项目上传服务器报runtime/cache错误

    很简单,给runtime权限777 就好了 chmod -r 777 runctime

  6. JavaScript原型继承的实例

    // 创建构造函数实例(获取DOM节点) <div id="app">测试字符</div>

  7. python 定义函数 两个文件调用函数

    在def_function.py文件里面写 #coding=utf-8 #定义函数 def hello(): print "hello world" 在test.py里面调用 #c ...

  8. Cassandra创建第一个用户

    Cassandra配置文件cassandra.yaml 的配置项, 默认是 authenticator: AllowAllAuthenticator 现在想创建Cassandra的用户,但是如果保持以 ...

  9. turtle库基础练习

    1.画一组同切圆 import turtle turtle.circle(10) turtle.circle(20) turtle.circle(30) turtle.circle(40) turtl ...

  10. ymPrompt,jcs缓存架构

    jcs.auxiliary.LTCP=org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPCacheFactory#jcs.auxiliary. ...