我需要从iPhone拍摄的照片中识别、旋转和裁剪一个矩形(名片)。我相信可以使用OpenCV来完成,但我以前没有使用过。有人能给些关于此方面的提示吗?
我需要从iPhone拍摄的照片中识别、旋转和裁剪一个矩形(名片)。我相信可以使用OpenCV来完成,但我以前没有使用过。有人能给些关于此方面的提示吗?
宽高比: 如果你只想找到正方形,就设为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度,则产生一个矩形
cv::Canny
(用于边缘检测)cv::cornerHarris
(用于角点检测)cv::HoughLines
(用于在边缘图像中找到直线)根据不同的角度,名片可能会变成梯形而非矩形。您可以使用OpenCV中的HoughLines2来识别图像中的边缘,并尝试识别最有可能是名片边缘的四条边。
我认为使用goodFeaturesToTrack()
更容易进行Harris-Corner检测。CornerHarris()
需要设置输出图像的特定类型。