【OpenCV学习笔记】二十五、轮廓查找与绘制(二)访问轮廓中每个点

来源:互联网 发布:网络机顶盒能收多少台 编辑:程序博客网 时间:2024/05/16 01:35

轮廓查找与绘制(二)访问轮廓中每个点

先上ppt:








代码:

///访问轮廓中每个点,并绘制在原图上#include "opencv2/opencv.hpp"using namespace cv;#include <iostream>using namespace std;int main(){//1.查找轮廓时,一般使用二值化图像,进行阈值化处理或者Canny边缘检测Mat srcImg = imread("22.jpg", CV_LOAD_IMAGE_COLOR);resize(srcImg,srcImg,Size(),0.7,0.7);imshow("srcImg", srcImg);Mat copyImg = srcImg.clone();//将原图像备份(查找轮廓会改变原图像)cvtColor(srcImg, srcImg, CV_BGR2GRAY);//转换成灰度图(阈值化需要图像会灰度图)threshold(srcImg, srcImg, 100, 255, CV_THRESH_BINARY_INV); //阈值化并保证黑色背景白色轮廓imshow("threshold", srcImg);//2.查找轮廓并绘制轮廓vector<vector<Point>> contours;//存放检测到的轮廓,每个轮廓均由点组成vector<Vec4i> hierarchy;//还未理解,没用到.//2.1查找轮廓——findContours()//轮廓检索模式:CV_RETR_EXTERNAL为检测最外层//轮廓近似方法:CV_CHAIN_APPROX_NONE为连续存储所有的轮廓点//findContours(srcImg,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);//轮廓检索模式:CV_RETR_TREE及其他均为检测所有轮廓//轮廓近似方法:CV_CHAIN_APPROX_SIMPLE为对于压缩存储,对于水平、垂直或斜向的线段,只会存储端点findContours(srcImg, contours, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);//2.2访问每个轮廓中的每个点,绘制在原图上//drawContours(copyImg, contours, -1, Scalar(0, 255, 0), 2, 8);//contourIdx:绘制轮廓索引,-1为绘制所有轮廓for (int i = 0;i<contours.size();i++)//遍历每个轮廓{for (int j = 0;j<contours[i].size();j+=10)//遍历轮廓中的所有点{//以画圆的方法在原图中画出每个轮廓中的点(以下两种方法一样)//circle(copyImg, Point(contours[i][j].x, contours[i][j].y), 1, Scalar(0, 255, 0), 2, 8);circle(copyImg,contours[i][j],3,Scalar(0,255,0),2,8);}}imshow("draw", copyImg);waitKey(0);return 0;}

运行结果:



1 0
原创粉丝点击