一、简介

图2

二、代码

  1. #include"opencv2/opencv.hpp"
  2. #include<iostream>
  3. using namespace std;
  4. using namespace cv;
  5.  
  6. void main()
  7. {
  8. Mat srcImg = imread("E://02.png");
  9. Mat tempImg = srcImg.clone();
  10. //Mat draw(srcImg.rows, srcImg.cols, CV_8UC3);
  11. cvtColor(srcImg, srcImg, CV_BGR2GRAY); //转为灰度图
  12. threshold(srcImg, srcImg,, , CV_THRESH_BINARY);//图像二值化,value>threshold(即100)?255:0
  13. imshow("srcImg", srcImg); //轮廓查找前
  14.  
  15. vector<vector<Point>> contours;
  16. vector<Vec4i> hierarchy;
  17. //findContours(srcImg, contours, hierarchy,RETR_EXTERNAL, CHAIN_APPROX_SIMPLE ); //查找外轮廓,压缩存储轮廓点
  18. findContours(srcImg, contours, hierarchy,RETR_LIST, CHAIN_APPROX_SIMPLE ); //查找所有轮廓
  19. //findContours(srcImg, contours, hierarchy,CV_RETR_CCOMP, CHAIN_APPROX_SIMPLE ); //查找所有轮廓
  20. //findContours(srcImg, contours, hierarchy,RETR_TREE, CHAIN_APPROX_NONE ); //查找所有轮廓,存储所有轮廓点
  21. imshow("cont", srcImg); //轮廓查找后
  22. drawContours(tempImg, contours,-, Scalar(, , ),); //绘制轮廓:-1代表绘制所有轮廓
  23. cout<<"num="<<contours.size()<<endl; //输出轮廓个数
  24. imshow("contours", tempImg);
  25.  
  26. waitKey();
  27. }

三、小应用

  1. void CImageProcessDlg::OnBnClickedButtonTest() //裂缝检测
  2. {
  3. // TODO: 在此添加控件通知处理程序代码
  4. Mat Img=img.clone();
  5. Mat gray;
  6. Mat element0=getStructuringElement(MORPH_RECT, Size(,));
  7. Mat element1=getStructuringElement(MORPH_RECT, Size(,));
  8. cvtColor(Img, gray, COLOR_RGB2GRAY );
  9. GaussianBlur(gray, gray, Size(,), , ); //---高斯滤波
  10. adaptiveThreshold(gray, gray, , ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY_INV, , ); //---自适应阈值
  11. erode(gray, gray, element0);
  12. dilate(gray, gray, element1);
  13. vector<vector<Point> > contours;
  14. vector<Vec4i> hierarchy;
  15. findContours(gray, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(, ));
  16. drawContours(img, contours, -, Scalar(,,), , , hierarchy );
  17. if(!(img.empty()))
  18. {
  19. resize(img, img, Size(rect.Width(),rect.Height())); //Resize大小
  20. imshow("PIC",img); //显示结果
  21. }
  22. if(contours.size()>)
  23. {
  24. color_flag=;
  25. SetDlgItemText(IDC_EDIT_RESULT0,_T("墙面有裂缝"));
  26. }
  27. else
  28. {
  29. color_flag=;
  30. SetDlgItemText(IDC_EDIT_RESULT0,_T("墙面正常"));
  31. }
  32. }

opencv学习之路(22)、轮廓查找与绘制(一)的更多相关文章

  1. opencv学习之路(23)、轮廓查找与绘制(二)——访问轮廓每个点

    一.简介 二.画出每个轮廓的每个点 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat src= ...

  2. opencv学习之路(28)、轮廓查找与绘制(七)——位置关系及轮廓匹配

    一.点与轮廓的距离及位置关系 #include "opencv2/opencv.hpp" #include <iostream> using namespace std ...

  3. opencv学习之路(27)、轮廓查找与绘制(六)——外接圆、椭圆拟合、逼近多边形曲线、计算轮廓面积及长度、提取不规则轮廓

    一.最小外接圆 #include "opencv2/opencv.hpp" #include<iostream> using namespace std; using ...

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

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

  5. opencv学习之路(24)、轮廓查找与绘制(三)——凸包

    一.简介 二.绘制点集的凸包 #include<opencv2/opencv.hpp> using namespace cv; void main() { //---绘制点集的凸包 Mat ...

  6. opencv学习之路(29)、轮廓查找与绘制(八)——轮廓特征属性及应用

    一.简介 HSV颜色空间(hue色调,saturation饱和度,value亮度) 二.HSV滑动条 #include "opencv2/opencv.hpp" #include ...

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

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

  8. opencv学习之路(39)、PCA

    一.PCA理论介绍 网上已经有许多介绍pca原理的博客,这里就不重复介绍了.详情可参考 http://blog.csdn.net/zhongkelee/article/details/44064401 ...

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

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

随机推荐

  1. 11.9luffycity(4)

    2018-11-9 17:57:09 明天开始自己独立写luffy部分表的接口, 越努力,越幸运!永远不要高估自己! 明天后天先不想下看视频,把接口做完,然后整理一下笔记,温故而习之,可以为师啊! 知 ...

  2. artTemplate的使用案列

    (2) https://github.com/aui/art-template/wiki/syntax:simple

  3. HTML5语音合成Speech Synthesis API简介

    by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=5865本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随意 ...

  4. Python学习之旅(二十三)

    Python基础知识(22):进程和线程(Ⅰ) 1.多进程 (1)fork Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程 fork可以在Mac ...

  5. ajaxFileUpload只能上传一次,和上传同名图片不能上传等bug问题

    createUploadForm: function (id, fileElementId) { //create form var formId = 'jUploadForm' + id; var ...

  6. LeetCode 696 Count Binary Substrings 解题报告

    题目要求 Give a string s, count the number of non-empty (contiguous) substrings that have the same numbe ...

  7. git本地仓库 push到远程仓库出现错误

    ! [rejected] master -> master (fetch first) error: failed to push some refs to hint: Updates were ...

  8. Linux3.10.0块IO子系统流程(0)-- 块IO子系统概述

    前言:这个系列主要是记录自己学习Linux块IO子系统的过程,其中代码分析皆基于Linux3.10.0版本,如有描述错误或不妥之处,敬请指出! 参考书籍:存储技术原理分析--基于Linux 2.6内核 ...

  9. PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别

    $_SERVER['SCRIPT_FILENAME']          -------> 当前执行程序的绝对路径及文件名__FILE__                             ...

  10. 1、vue 笔记之 组件

    1.组件个人理解:  <组件>是页面的一部分,将界面切分成部分,每部分称为 <组件>   2.组件化思想:          //2.1.定义一个全局的组件,组件支持‘驼峰命名 ...