我正在寻找一组正确的算法来解决这个图像处理问题:
- 我有一个扭曲的二进制图像,其中包含一个扭曲的矩形
- 我需要找到这个矩形的 4 个角点的一个很好的近似值
我可以使用 OpenCV 计算轮廓,但由于图像失真,它通常会包含超过 4 个角点。是否有一个很好的近似算法(最好使用 OpenCV 操作)来使用二进制图像或轮廓描述找到矩形角点?
图像如下所示:
谢谢!
丹尼斯
我正在寻找一组正确的算法来解决这个图像处理问题:
我可以使用 OpenCV 计算轮廓,但由于图像失真,它通常会包含超过 4 个角点。是否有一个很好的近似算法(最好使用 OpenCV 操作)来使用二进制图像或轮廓描述找到矩形角点?
图像如下所示:
谢谢!
丹尼斯
使用cvApproxPoly函数消除轮廓的节点数,然后过滤掉那些节点过多或角度与 90 度相差很大的轮廓。另见类似答案
略有不同的答案,请参阅
http://opencv.willowgarage.com/documentation/cpp/camera_calibration_and_3d_reconstruction.html
看opencv函数ApproxPoly。它从轮廓近似多边形。
试试哈里斯角检测器。OpenCV 包中有示例。您需要为您的图像使用参数。
并查看其他 OpenCV 算法: http: //www.comp.leeds.ac.uk/vision/opencv/opencvref_cv.html#cv_imgproc_features
我会尝试广义霍夫变换,它有点慢,但可以很好地处理扭曲/不完整的形状。
vector<Point> cardPoly;// Quad storage
int PolyLines = 0;//PolyPoly counter ;)
double simplicity = 0.5;//Increment of adjustment, lower numbers may be more precise vs. high numbers being faster to cycle.
while(PolyLines != 4)//Adjust this
{
approxPolyDP(transContours, Poly, simplicity, true);
PolyLines = Poly.size();
simplicity += 0.5;
}