我正在寻找合适的算法来解决这个图像处理问题:
我可以使用OpenCV计算轮廓,但是由于图像失真,它通常会包含4个以上的角点。 是否有一个很好的近似算法(最好使用OpenCV操作)来使用二进制图像或轮廓描述找到矩形角点?
图片如下所示:
谢谢!
丹尼斯
答案 0 :(得分:5)
使用cvApproxPoly函数消除轮廓的节点数,然后滤除那些节点太多或角度与90度差异很大的轮廓。另请参阅similar answer
答案 1 :(得分:2)
答案很少,见
http://opencv.willowgarage.com/documentation/cpp/camera_calibration_and_3d_reconstruction.html
答案 2 :(得分:1)
查看opencv函数ApproxPoly。它近似于轮廓中的多边形。
答案 3 :(得分:1)
尝试Harris Corner Detector。 OpenCV包中有一个例子。你需要为你的形象玩params。
并查看其他OpenCV算法:http://www.comp.leeds.ac.uk/vision/opencv/opencvref_cv.html#cv_imgproc_features
答案 4 :(得分:0)
我会尝试广义的Hough变换它有点慢,但处理扭曲/不完整的形状。
答案 5 :(得分:0)
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;
}