opencv轮廓查找与绘制——位置关系及轮廓匹配
一、点与轮廓的距离及位置关系
1 #include "opencv2/opencv.hpp" 2 #include <iostream> 3 using namespace std; 4 using namespace cv; 5 6 void main() 7 { 8 //计算点到轮廓的距离与位置关系 9 Mat srcImg = imread("E://00.png"); 10 imshow("src", srcImg); 11 12 Mat dstImg = srcImg.clone(); 13 cvtColor(srcImg, srcImg, CV_BGR2GRAY); 14 threshold(srcImg, srcImg, 100, 255, CV_THRESH_BINARY); 15 imshow("threshold", srcImg); 16 17 //查找轮廓 18 vector<vector<Point>> contours; 19 vector<Vec4i> hierarcy; 20 findContours(srcImg, contours, hierarcy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE);//TREE:提取所有轮廓 NONE:画出轮廓所有点 21 cout << "contours.size()=" << contours.size() << endl; 22 for (int i = 0; i < contours.size(); i++)//遍历每个轮廓 23 { 24 for (int j = 0; j < contours[i].size(); j++)//遍历轮廓每个点 25 { 26 cout << "(" << contours[i][j].x << "," << contours[i][j].y << ")" << endl; 27 } 28 } 29 30 double a0 = pointPolygonTest(contours[0], Point(3, 3), true);//点到轮廓的最短距离 31 double b0 = pointPolygonTest(contours[0], Point(212, 184), false);//点与轮廓的位置关系:-1表示外部;0表示在轮廓上;1表示轮廓内部 32 cout << "a0=" << a0 << endl; 33 cout << "b0=" << b0 << endl; 34 waitKey(0); 35 }
a0之所以是负数,是因为点在轮廓外部
二、轮廓的矩
轮廓矩的介绍:
http://blog.csdn.net/cp32212116/article/details/38374015
http://blog.csdn.net/huixingshao/article/details/42060231