如何使用iphone在照片中找到矩形?
我需要从iphone上拍摄的照片中识别、旋转和裁剪一个矩形(名片)。我相信这可以通过使用OpenCV来实现,但我以前从未使用过它。有人能给你一些建议吗?要开始学习,你应该看看OpenCV的api。特别是如何使用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条边缘。请参见
(用于边缘检测)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; }
您是说除了旋转,我还需要倾斜照片?我在考虑相机通常面对名片的情况,但我不明白的是,如果在某些地方背景可以接近前景色,在原始图像为矩形的情况下,我怎么还能找到边缘。这是一个有趣的问题。似乎不存在普遍的解决办法。首先,我想到的是:如果你有一些关于目标对象的先验信息(例如颜色直方图或纹理特征),那么你可以以高概率定位包含目标的图像区域,并将边界轮廓设置为初始猜测,然后应用活动轮廓方法来改进结果