我需要从iPhone拍摄的照片中识别,旋转和裁剪矩形(名片)。我相信这可以通过使用OpenCV来完成,但我之前没有使用它。有人可以给出一些提示吗?
答案 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;
}
答案 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)
如果您知道矩形的大致高度和宽度,则可以执行以下步骤:
以上所有步骤都可以使用OpenCV或Aforge.Net完成,我个人是使用Aforge.Net完成的。
答案 4 :(得分:1)
根据视点,卡片最终可能不是矩形,而是更多的梯形。您可以在OpenCV中使用HoughLines2来识别图像中的边缘,并尝试识别最有可能成为名片边缘的4条边。
答案 5 :(得分:1)
我认为goodFeaturesToTrack()
更容易用于Harris-Corner检测。 CornerHarris()
需要将outout图像设置为特定类型。