opencv学习之路(16)、膨胀腐蚀应用之走迷宫
一、分析
贴出应用图片以供直观了解


红色部分,因图而异(某些参数,根据图片的不同需要进行相应的修改)
二、代码
#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)、膨胀腐蚀应用之走迷宫的更多相关文章
- opencv学习之路(14)、形态学之膨胀腐蚀
一.膨胀腐蚀概述(对高亮部分进行操作) 二.膨胀 三.腐蚀 四.代码 1.查看结构元素 #include<opencv2/opencv.hpp> #include<iostream& ...
- C++ Opencv 自写函数实现膨胀腐蚀处理
一.膨胀腐蚀学习笔记 二.代码及结果分享 #include <opencv2/opencv.hpp> #include <iostream> using namespace s ...
- opencv学习之路(15)、形态学其他操作(开、闭、顶帽、黑帽、形态学梯度)
一.形态学其他操作(用的不多,如果忘了也可以通过膨胀腐蚀得到相同效果) 1.开运算 2.闭运算 3.形态学梯度 4.顶帽 5.黑帽 #include "opencv2/opencv.hpp& ...
- opencv学习之路(37)、运动物体检测(二)
一.运动物体轮廓椭圆拟合及中心 #include "opencv2/opencv.hpp" #include<iostream> using namespace std ...
- opencv学习之路(36)、运动物体检测(一)
一.简介 二.背景减法 图片说明 #include "opencv2/opencv.hpp"using namespace cv; void main() { Mat img1 = ...
- opencv学习之路(40)、人脸识别算法——EigenFace、FisherFace、LBPH
一.人脸识别算法之特征脸方法(Eigenface) 1.原理介绍及数据收集 特征脸方法主要是基于PCA降维实现. 详细介绍和主要思想可以参考 http://blog.csdn.net/u0100066 ...
- opencv学习之路(31)、GrabCut & FloodFill图像分割
一.GrabCut 1.利用Rect做分割 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat ...
- opencv学习之路(26)、轮廓查找与绘制(五)——最小外接矩形
一.简介 二.轮廓最小外接矩形的绘制 #include "opencv2/opencv.hpp" using namespace cv; void main() { //轮廓最小外 ...
- opencv学习之路(25)、轮廓查找与绘制(四)——正外接矩形
一.简介 二.外接矩形的查找绘制 #include "opencv2/opencv.hpp" using namespace cv; void main() { //外接矩形的查找 ...
随机推荐
- iOS 新浪微博-3.0 新特性
每个程序在第一次启动的时候,都会显示新特性.效果如下: 思路: 添加一个ViewController,里面放两个View,一个是UISrollView,另一个pageControl 往UISrollV ...
- Xcode 运行 Signing for "XXXXXX" requires selecting either a development team or a provisioning profile. Select a development team or a provisioning profile in the project editor
Signing for "XXXXXX" requires selecting either a development team or a provisioning profil ...
- 使用Eclipse出现make: *** No rule to make target `all'. Stop.解决办法
在mac下用eclipse开发jni 总是出现如题所示的异常,后来将build command 改成ndk-build就可以了 具体如图所示 输出内容 **** Build of configura ...
- 30.get和post的区别
POST和GET的区别 Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个 ...
- php $_FILES上传失败 error返回值说明
用PHP上传文件时,我们会用程序去监听浏览器发送过来的文件信息,首先会通 过$_FILES[fieldName]['error']的不同数值来判断此欲上传的文件状态是否正常. $_FILES[fiel ...
- 数据库所有者 (dbo)
数据库所有者 (dbo) dbo 是具有在数据库中执行所有活动的暗示性权限的用户.将固定服务器角色 sysadmin 的任何成员都映射到每个数据库内称为 dbo 的一个特殊用户上.另外,由固定服务器角 ...
- java中的锁之AbstractQueuedSynchronizer源码分析(一)
一.AbstractQueuedSynchronizer类介绍. 该抽象类有两个内部类,分别是静态不可继承的Node类和公有的ConditionObject类.AbstractQueuedSynchr ...
- RocketMQ的使用
1 在resources目录下创建config目录,新建文件rocketmq.properties文件 # 指定namesrv地址 suning.rocketmq.namesrvAddr=localh ...
- 1.安装Python3和PyCharm
一.安装Python3 1.进入官网:www.python.org 2.下载(可以选择你自己的电脑系统版本,我这里是win7 64位) 3.然后点击XXX.exe傻瓜式安装 4.配置环境变量 [右键计 ...
- 斯坦福大学自然语言处理第四课“语言模型(Language Modeling)”
http://52opencourse.com/111/斯坦福大学自然语言处理第四课-语言模型(language-modeling) 一.课程介绍 斯坦福大学于2012年3月在Coursera启动了在 ...