opencv学习之路(22)、轮廓查找与绘制(一)
一、简介
图2
二、代码
- #include"opencv2/opencv.hpp"
- #include<iostream>
- using namespace std;
- using namespace cv;
- void main()
- {
- Mat srcImg = imread("E://02.png");
- Mat tempImg = srcImg.clone();
- //Mat draw(srcImg.rows, srcImg.cols, CV_8UC3);
- cvtColor(srcImg, srcImg, CV_BGR2GRAY); //转为灰度图
- threshold(srcImg, srcImg,, , CV_THRESH_BINARY);//图像二值化,value>threshold(即100)?255:0
- imshow("srcImg", srcImg); //轮廓查找前
- vector<vector<Point>> contours;
- vector<Vec4i> hierarchy;
- //findContours(srcImg, contours, hierarchy,RETR_EXTERNAL, CHAIN_APPROX_SIMPLE ); //查找外轮廓,压缩存储轮廓点
- findContours(srcImg, contours, hierarchy,RETR_LIST, CHAIN_APPROX_SIMPLE ); //查找所有轮廓
- //findContours(srcImg, contours, hierarchy,CV_RETR_CCOMP, CHAIN_APPROX_SIMPLE ); //查找所有轮廓
- //findContours(srcImg, contours, hierarchy,RETR_TREE, CHAIN_APPROX_NONE ); //查找所有轮廓,存储所有轮廓点
- imshow("cont", srcImg); //轮廓查找后
- drawContours(tempImg, contours,-, Scalar(, , ),); //绘制轮廓:-1代表绘制所有轮廓
- cout<<"num="<<contours.size()<<endl; //输出轮廓个数
- imshow("contours", tempImg);
- waitKey();
- }
三、小应用
- void CImageProcessDlg::OnBnClickedButtonTest() //裂缝检测
- {
- // TODO: 在此添加控件通知处理程序代码
- Mat Img=img.clone();
- Mat gray;
- Mat element0=getStructuringElement(MORPH_RECT, Size(,));
- Mat element1=getStructuringElement(MORPH_RECT, Size(,));
- cvtColor(Img, gray, COLOR_RGB2GRAY );
- GaussianBlur(gray, gray, Size(,), , ); //---高斯滤波
- adaptiveThreshold(gray, gray, , ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY_INV, , ); //---自适应阈值
- erode(gray, gray, element0);
- dilate(gray, gray, element1);
- vector<vector<Point> > contours;
- vector<Vec4i> hierarchy;
- findContours(gray, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(, ));
- drawContours(img, contours, -, Scalar(,,), , , hierarchy );
- if(!(img.empty()))
- {
- resize(img, img, Size(rect.Width(),rect.Height())); //Resize大小
- imshow("PIC",img); //显示结果
- }
- if(contours.size()>)
- {
- color_flag=;
- SetDlgItemText(IDC_EDIT_RESULT0,_T("墙面有裂缝"));
- }
- else
- {
- color_flag=;
- SetDlgItemText(IDC_EDIT_RESULT0,_T("墙面正常"));
- }
- }
opencv学习之路(22)、轮廓查找与绘制(一)的更多相关文章
- opencv学习之路(23)、轮廓查找与绘制(二)——访问轮廓每个点
一.简介 二.画出每个轮廓的每个点 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat src= ...
- opencv学习之路(28)、轮廓查找与绘制(七)——位置关系及轮廓匹配
一.点与轮廓的距离及位置关系 #include "opencv2/opencv.hpp" #include <iostream> using namespace std ...
- opencv学习之路(27)、轮廓查找与绘制(六)——外接圆、椭圆拟合、逼近多边形曲线、计算轮廓面积及长度、提取不规则轮廓
一.最小外接圆 #include "opencv2/opencv.hpp" #include<iostream> using namespace std; using ...
- opencv学习之路(25)、轮廓查找与绘制(四)——正外接矩形
一.简介 二.外接矩形的查找绘制 #include "opencv2/opencv.hpp" using namespace cv; void main() { //外接矩形的查找 ...
- opencv学习之路(24)、轮廓查找与绘制(三)——凸包
一.简介 二.绘制点集的凸包 #include<opencv2/opencv.hpp> using namespace cv; void main() { //---绘制点集的凸包 Mat ...
- opencv学习之路(29)、轮廓查找与绘制(八)——轮廓特征属性及应用
一.简介 HSV颜色空间(hue色调,saturation饱和度,value亮度) 二.HSV滑动条 #include "opencv2/opencv.hpp" #include ...
- opencv学习之路(26)、轮廓查找与绘制(五)——最小外接矩形
一.简介 二.轮廓最小外接矩形的绘制 #include "opencv2/opencv.hpp" using namespace cv; void main() { //轮廓最小外 ...
- opencv学习之路(39)、PCA
一.PCA理论介绍 网上已经有许多介绍pca原理的博客,这里就不重复介绍了.详情可参考 http://blog.csdn.net/zhongkelee/article/details/44064401 ...
- opencv学习之路(37)、运动物体检测(二)
一.运动物体轮廓椭圆拟合及中心 #include "opencv2/opencv.hpp" #include<iostream> using namespace std ...
随机推荐
- 11.9luffycity(4)
2018-11-9 17:57:09 明天开始自己独立写luffy部分表的接口, 越努力,越幸运!永远不要高估自己! 明天后天先不想下看视频,把接口做完,然后整理一下笔记,温故而习之,可以为师啊! 知 ...
- artTemplate的使用案列
(2) https://github.com/aui/art-template/wiki/syntax:simple
- HTML5语音合成Speech Synthesis API简介
by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=5865本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随意 ...
- Python学习之旅(二十三)
Python基础知识(22):进程和线程(Ⅰ) 1.多进程 (1)fork Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程 fork可以在Mac ...
- ajaxFileUpload只能上传一次,和上传同名图片不能上传等bug问题
createUploadForm: function (id, fileElementId) { //create form var formId = 'jUploadForm' + id; var ...
- LeetCode 696 Count Binary Substrings 解题报告
题目要求 Give a string s, count the number of non-empty (contiguous) substrings that have the same numbe ...
- git本地仓库 push到远程仓库出现错误
! [rejected] master -> master (fetch first) error: failed to push some refs to hint: Updates were ...
- Linux3.10.0块IO子系统流程(0)-- 块IO子系统概述
前言:这个系列主要是记录自己学习Linux块IO子系统的过程,其中代码分析皆基于Linux3.10.0版本,如有描述错误或不妥之处,敬请指出! 参考书籍:存储技术原理分析--基于Linux 2.6内核 ...
- PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别
$_SERVER['SCRIPT_FILENAME'] -------> 当前执行程序的绝对路径及文件名__FILE__ ...
- 1、vue 笔记之 组件
1.组件个人理解: <组件>是页面的一部分,将界面切分成部分,每部分称为 <组件> 2.组件化思想: //2.1.定义一个全局的组件,组件支持‘驼峰命名 ...