如何使用iphone在照片中找到矩形?

时间:2011-05-26 05:33:54

标签: iphone ipad image-processing opencv image-recognition

我需要从iPhone拍摄的照片中识别,旋转和裁剪矩形(名片)。我相信这可以通过使用OpenCV来完成,但我之前没有使用它。有人可以给出一些提示吗?

6 个答案:

答案 0 :(得分:14)

iOS 8 ,您现在可以使用返回 CIRectangleFeature 的新探测器 CIDetectorTypeRectangle 。 您可以添加选项:

  • 准确度:低/高
  • 宽高比:如果您只想查找方块,则为1.0

    CIImage *image = // your image
    NSDictionary *options = @{CIDetectorAccuracy: CIDetectorAccuracyHigh, CIDetectorAspectRatio: @(1.0)};
    CIDetector *rectangleDetector = [CIDetector detectorOfType:CIDetectorTypeRectangle context:nil options:options];
    
    NSArray *rectangleFeatures = [rectangleDetector featuresInImage:image];
    
    for (CIRectangleFeature *rectangleFeature in rectangleFeatures) {
        CGPoint topLeft = rectangleFeature.topLeft;
        CGPoint topRight = rectangleFeature.topRight;
        CGPoint bottomLeft = rectangleFeature.bottomLeft;
        CGPoint bottomRight = rectangleFeature.bottomRight;
    }
    

WWDC 2014 Advances in Core Image, Session 514.

中的更多信息

An example from shinobicontrols.com

答案 1 :(得分:8)

请参阅opencv示例代码OpenCV2.2\samples\cpp\squares.cpp。他们执行以下操作:

  • 使用Canny检测边缘

  • findContours

  • 检索轮廓
  • 对于每个轮廓

    • 使用approxPolyDP近似轮廓以减少顶点数

    • 如果轮廓有4个顶点,每个角度为~90度,那么产生一个矩形

答案 2 :(得分:2)

为了帮助您入门,您应该查看OpenCV的feature detection api。特别是

  • cv::Canny(用于边缘检测),
  • 也许cv::cornerHarris(用于角落检测),
  • cv::HoughLines(用于在边缘图像中查找直线)。

HTH

答案 3 :(得分:2)

如果您知道矩形的大致高度和宽度,则可以执行以下步骤:

  • 物体检测:使用轮廓跟踪进行元件标记。
  • 在标记了所有对象之后,通过计算矩形的周长来过滤检测到的组件。 P = 2 *(H + W) 忽略任何尺寸小于或大于P的组件,只保留更接近P的组件。
  • 从轮廓点找到矩形的角点。
  • 从原始图像中提取矩形。

以上所有步骤都可以使用OpenCV或Aforge.Net完成,我个人是使用Aforge.Net完成的。​​

答案 4 :(得分:1)

根据视点,卡片最终可能不是矩形,而是更多的梯形。您可以在OpenCV中使用HoughLines2来识别图像中的边缘,并尝试识别最有可能成为名片边缘的4条边。

答案 5 :(得分:1)

我认为goodFeaturesToTrack()更容易用于Harris-Corner检测。 CornerHarris()需要将outout图像设置为特定类型。