【发布时间】:2011-09-02 07:26:04
【问题描述】:
我需要从 iPhone 拍摄的照片中识别、旋转和裁剪一个矩形(名片)。我相信这可以通过使用 OpenCV 来完成,但我之前没有使用过。有人可以提供一些建议吗?
【问题讨论】:
标签: iphone ipad image-processing opencv image-recognition
我需要从 iPhone 拍摄的照片中识别、旋转和裁剪一个矩形(名片)。我相信这可以通过使用 OpenCV 来完成,但我之前没有使用过。有人可以提供一些建议吗?
【问题讨论】:
标签: iphone ipad image-processing opencv image-recognition
从 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;
}
【讨论】:
查看opencv示例代码OpenCV2.2\samples\cpp\squares.cpp。他们执行以下操作:
使用 Canny 检测边缘
通过findContours检索轮廓
对于每个轮廓
使用approxPolyDP 近似轮廓以减少顶点数
如果轮廓有 4 个顶点,每个角度约为 90 度,则生成一个矩形
【讨论】:
要开始使用,您应该查看 OpenCV 的 feature detection api。特别是
cv::Canny(用于边缘检测),cv::cornerHarris(用于角点检测),cv::HoughLines(用于在边缘图像中查找直线)。HTH
【讨论】:
根据不同的视角,卡片最终可能不是矩形,而是更多的梯形。您可以在OpenCV中使用HoughLines2来识别图像中的边缘,并尝试识别出最有可能是名片边缘的4条边缘。
【讨论】:
如果您知道矩形的大致高度和宽度,那么您可以执行以下步骤:
以上所有步骤都可以使用 OpenCV 或 Aforge.Net 完成,我个人使用 Aforge.Net 完成。
【讨论】:
我认为goodFeaturesToTrack() 更容易用于 Harris-Corner 检测。 CornerHarris()需要将图片设置为特定类型。
【讨论】: