如何用检测由直线构成的四边形(多边形)? 这个问题自己困扰了十来天, 查了相关的算法书
(a modern approach, algorithms and applications, computer and machine vision,
Feature Extraction & Image Processing ), 并未找到直接的内容可以使用
这阵子看了一些论文, 有用霍夫变换的, 有通过edge找vanishing point的, 有用ransac或最小二乘法拟合直线的,
印象里, 在我搜到有关quadrangle, quad, rectangle, rectilinear 之类关键词的高引用次数论文中,
前面两个方法应用的比较多. 也不知道我关键词选的是否合适.检测多边形的原理和检测四边形类似.
下面进入正题 先说怎么直接调用opencv来检测四边形(多边形)
目前我只能想到下面几个
1.approxPolyDP
2.findContours中的CV_CHAIN_APPROX_SIMPLE
3.hough变换
下面介绍opencv函数的使用
最简单的要属approxPolyDP, 算法解释: 看wiki的动图
https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm
std::vector<std::vector<cv::Point>> roi_point;
cv::findContours(roi_enlarged,roi_point,CV_RETR_EXTERNAL,