一、简介

二、画出每个轮廓的每个点

 #include "opencv2/opencv.hpp"
using namespace cv; void main()
{
Mat src=imread("E://22.jpg");
Mat temp=src.clone();
//转灰度图,二值化
cvtColor(src,src,CV_BGR2GRAY);
threshold(src,src,,,THRESH_BINARY);
imshow("thres",src);
//查找并绘制轮廓
vector<vector<Point>>contours;
vector<Vec4i>hierarcy;
findContours(src,contours,hierarcy,CV_RETR_TREE,CV_LINK_RUNS);
/*drawContours(temp,contours,-1,Scalar(0,255,0),2,8); 绘制并显示所有轮廓
imshow("contours",temp);*/ //绘制轮廓的每一个点
for(int i=; i<contours.size(); i++){
for(int j=; j<contours[i].size(); j++){
circle(temp,Point(contours[i][j].x,contours[i][j].y),,Scalar(,,),,);
}
}
imshow("contours",temp);
waitKey();
}

轮廓太密集了,稍微改改参数

     for(int j=; j<contours[i].size(); j+=){
circle(temp,Point(contours[i][j].x,contours[i][j].y),,Scalar(,,),,);
}

稍微改改,有另一种效果(动态射线)

 for(int i=; i<contours.size(); i++){
for(int j=; j<contours[i].size(); j+=){
circle(temp,Point(contours[i][j].x,contours[i][j].y),,Scalar(,,),,);
line(temp,Point(,),Point(contours[i][j].x,contours[i][j].y), Scalar(, , ), , );
waitKey();
imshow("contours", temp);
}
}

改改又是一种效果

三、孔洞填充

 #include "opencv2/opencv.hpp"
using namespace cv; void main()
{
Mat src=imread("E://33.jpg");
Mat temp=src.clone();
//转灰度图,二值化
cvtColor(src,src,CV_BGR2GRAY);
threshold(src,src,,,THRESH_BINARY);
imshow("thres",src);
//查找并绘制轮廓
vector<vector<Point>>contours;
vector<Vec4i>hierarcy;
findContours(src,contours,hierarcy,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE); ///孔洞填充
findContours(src, contours, hierarcy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); //查找轮廓
drawContours(temp, contours, -, Scalar(, , ), -, ); //绘制轮廓
imshow("contours",temp);
waitKey();
}

稍微改改

opencv学习之路(23)、轮廓查找与绘制(二)——访问轮廓每个点的更多相关文章

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

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

  2. opencv学习之路(22)、轮廓查找与绘制(一)

    一.简介 图2 二.代码 #include"opencv2/opencv.hpp" #include<iostream> using namespace std; us ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 解决 nginx 出现 413 Request Entity Too Large 的问题

    1.若nginx用所用的 php 请求解析服务是 fpm, 则检查 /etc/php5/fpm/php.ini 文件中的参数 upload_max_filesize = 20M post_max_si ...

  2. Nodejs 使用Protobuf

    参考: Nodejs中使用Protobuf的.proto文件 为了在nodejs服务端使用proto 所以网上找了一些教程,这里实现下. 一 安装protobufjs 在服务端项目文件夹里shift+ ...

  3. gitlab+jenkins+tomcat CI/CD 部署

    整个项目的框架为: gitlab的安装与使用(Centos7) gitlab的安装 新建yum源 vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] nam ...

  4. 在微信下载app引导页代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. vue3版本到vue2版本的桥接工具

    vue2的命令可以正常使用.

  6. map里面的set方法

    let a=[1,2,3,4,1,2,3,4,1,4];let b= new Set(a);console.log(b) 还有add方法介绍下: let a=new Set();let b=[1,1, ...

  7. 关于ie浏览器信任站点的代码

    1检测用户当前浏览器是否将域名的ip添加信任站点 js代码 //域名ip的获取 var hostname = window.location.hostname;       var WshShell ...

  8. BASE64和图片之间的互相转换

    package com.test.demo; import java.io.FileInputStream; import java.io.FileOutputStream; import java. ...

  9. Python-----redis数据库

    # redis数据库:基于内存的高性能key-value数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存:#缺点:1.数据库容量受到物理内存的限制, ...

  10. spark-sql将Rdd转换为DataFrame进行操作的两种方法

    SparkConf sparkConf = new SparkConf() .setMaster("local").setAppName("ClzMap"); ...