在图像中找到扭曲的矩形(OpenCV)

时间:2011-06-15 11:19:21

标签: image-processing opencv camera-calibration

我正在寻找合适的算法来解决这个图像处理问题:

  • 我有一个包含扭曲矩形的扭曲二进制图像
  • 我需要找到这个矩形的4个角点的良好近似值

我可以使用OpenCV计算轮廓,但是由于图像失真,它通常会包含4个以上的角点。 是否有一个很好的近似算法(最好使用OpenCV操作)来使用二进制图像或轮廓描述找到矩形角点?

图片如下所示:

enter image description here

谢谢!

丹尼斯

6 个答案:

答案 0 :(得分:5)

使用cvApproxPoly函数消除轮廓的节点数,然后滤除那些节点太多或角度与90度差异很大的轮廓。另请参阅similar answer

答案 1 :(得分:2)

答案 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变换它有点慢,但处理扭曲/不完整的形状。

http://en.wikipedia.org/wiki/Hough_transform

答案 5 :(得分:0)

  1. 即使你开始有一些缺陷,即你的aboutPolly调用返回pent / hexagons,这也会有效。它会将任何轮廓,例如transContours减少到四边形或任何你想要的多边形。
  2. 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;
    }