点多边形测试
来源:互联网 发布:世界行政区域数据 编辑:程序博客网 时间:2024/05/16 14:43
#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>using namespace std;using namespace cv;vector<vector<Point> > closed_contours;vector<Vec4i> heirarchy;cv::Mat contoursAllMat;// 函数多边形近似vector<vector<Point> > cacContoursClosed(vector<vector<Point> > contours){vector<vector<Point> > vContours;vContours.resize(contours.size());for (int i = 0; i < contours.size(); i++)approxPolyDP(contours[i], vContours[i], 0.1, true);return vContours;}// 最小点集边界轮廓int cacContoursSmall(Point p, vector<vector<Point> > contours, vector<Vec4i> heirarchy){int idx = 0, prev_idx = -1;while (idx >= 0){vector<Point> c = contours[idx];// 点多边形测试double d = pointPolygonTest(c, p, false);// 判断点集是否在多边形内if (d > 0){prev_idx = idx;idx = heirarchy[idx][2];}// 不在内,将继续遍历下一elseidx = heirarchy[idx][0];}return prev_idx;}// 鼠标点击动作响应void on_mouse(int event, int x, int y, int, void *) {// 事件左键确认if (event != EVENT_LBUTTONDOWN)return;Point p(x, y);// 寻找最小封闭外界轮廓int idxContour = cacContoursSmall(p, closed_contours, heirarchy);// 如果不存在轮廓,显示将返回if (idxContour < 0){imshow("Contours", contoursAllMat);return;}// 绘图所有最小的外界轮廓vector<vector<Point> > viewContour;viewContour.push_back(closed_contours[idxContour]);if (!viewContour.empty()) {Mat result = contoursAllMat.clone();// 绘制所有轮廓drawContours(result, viewContour, -1, Scalar(0, 0, 255), 3);imshow("Contours", result);}}int main(){//cv::Mat srcImage = imread("..\\images\\circle.jpg");cv::Mat srcImage = imread("22.jpg");if (!srcImage.data)return -1;cv:imshow("srcImage", srcImage);contoursAllMat = srcImage.clone();cv::Mat srcGray, edges;// 边缘检测cvtColor(srcImage, srcGray, CV_RGB2GRAY);Canny(srcGray, edges, 50, 100);// 寻找外界轮廓vector<vector<Point> > contours;findContours(edges, contours, heirarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE);// 确认检测轮廓点的封闭性closed_contours = cacContoursClosed(contours);// 绘制所有轮廓drawContours(srcImage, closed_contours, -1, Scalar(0, 255, 0));imshow("Contours", srcImage);// 鼠标回调事件setMouseCallback("Contours", on_mouse);while (char(waitKey(1)) != 'q') {}return 0;}
转载:http://blog.csdn.net/zhuwei1988
0 0
- 点多边形测试
- 测试点是否在多边形内的方法总结
- 多边形内点判断
- 2.1 点、直线、多边形
- 经纬度多边形点判断
- 多边形判断点内外
- 计算一个点是否在多边形里 JavaScript实现(未测试)
- 多边形的命中测试
- 多边形测试--pointPolygonTest()
- imgproc模块--多边形测试
- 判断点在多边形中
- 判断点在多边形内
- 判断点在多边形内部
- 点是否在多边形内
- 判断点在多边形内部
- 判断点在多边形内部
- 判断点在多边形内部
- 判断点在多边形内
- Reduce端的Iterable集合的理解:
- CentOS7上面安装kvm
- Programatically install apk from assets folder in android
- Linux下的C语言编程——求三角形面积
- web常见问题
- 点多边形测试
- 我的caffe学习之路<第九天>
- NSURLConnection设置代理
- Java输入/输出流
- 【CodeForce 734C 】Anton and Making Potions (枚举+二分)
- JQuery 解决用load加载页面到div时,不执行页面js的问题
- android获取文件getMimeType的方法
- linux vim 全部 替换 转义字符
- 连接跟踪的一些设想