Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用iphone在照片中找到矩形?_Iphone_Ipad_Image Processing_Opencv_Image Recognition - Fatal编程技术网

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

如何使用iphone在照片中找到矩形?,iphone,ipad,image-processing,opencv,image-recognition,Iphone,Ipad,Image Processing,Opencv,Image Recognition,我需要从iphone上拍摄的照片中识别、旋转和裁剪一个矩形(名片)。我相信这可以通过使用OpenCV来实现,但我以前从未使用过它。有人能给你一些建议吗?要开始学习,你应该看看OpenCV的api。特别是 cv::Canny(用于边缘检测) 可能cv::cornerHarris(用于角点检测) 和cv::HoughLines(用于在边缘图像中查找直线) HTH根据视点的不同,卡片可能不是矩形,而是梯形。您可以在OpenCV中使用来识别图像中的边缘,并尝试识别最有可能是名片边缘的4条边缘。请参见

我需要从iphone上拍摄的照片中识别、旋转和裁剪一个矩形(名片)。我相信这可以通过使用OpenCV来实现,但我以前从未使用过它。有人能给你一些建议吗?

要开始学习,你应该看看OpenCV的api。特别是

  • cv::Canny
    (用于边缘检测)
  • 可能
    cv::cornerHarris
    (用于角点检测)
  • cv::HoughLines
    (用于在边缘图像中查找直线)

HTH

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

请参见OpenCV示例代码
OpenCV2.2\samples\cpp\squares.cpp
。他们的工作如下:

  • 使用Canny算法检测边缘

  • 通过
    findContours

  • 对于每个轮廓

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

    • 如果轮廓有4个顶点,每个角度约为90度,则生成一个矩形


我认为
良好特性跟踪()
更容易用于哈里斯角点检测
CornerHarris()
需要将图像设置为特定类型。

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

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

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

从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;
    }
    
更多信息请访问


您是说除了旋转,我还需要倾斜照片?我在考虑相机通常面对名片的情况,但我不明白的是,如果在某些地方背景可以接近前景色,在原始图像为矩形的情况下,我怎么还能找到边缘。这是一个有趣的问题。似乎不存在普遍的解决办法。首先,我想到的是:如果你有一些关于目标对象的先验信息(例如颜色直方图或纹理特征),那么你可以以高概率定位包含目标的图像区域,并将边界轮廓设置为初始猜测,然后应用活动轮廓方法来改进结果