Мне нужно будет идентифицировать, повернуть и обрезать прямоугольник (визитку) по фотографии, снятой с iphone. Я считаю, что это можно сделать с помощью OpenCV, но я не использовал его раньше. Кто-нибудь может дать несколько советов по этому поводу?
С iOS 8 , теперь вы можете использовать новый детектор CIDetectorTypeRectangle , который возвращает CIRectangleFeature .Вы можете добавить опции:
Соотношение сторон: 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; }
Дополнительная информация в WWDC 2014 Достижения в базовом образе , сессия 514.
Пример с shinobicontrols.com
См. Пример кода opencv OpenCV2.2\samples\cpp\squares.cpp. Они делают следующее:
OpenCV2.2\samples\cpp\squares.cpp
Обнаружение краев с помощью Canny
Извлечение контуров по findContours
findContours
Для каждого контура
приблизительный контур с использованием approxPolyDP для уменьшения количества вершин
approxPolyDP
если контур имеет 4 вершины и каждый угол составляет ~ 90 градусов, то получается прямоугольник
Если вы знаете приблизительную высоту и ширину прямоугольника, то вы можете сделать следующие шаги:
Все вышеперечисленные шаги можно выполнить с помощью OpenCV или Aforge.Net, я лично сделал это с помощью Aforge.Net.
Чтобы начать, вы должны взглянуть на функцию обнаружения API OpenCV.Особенно
cv::Canny
cv::cornerHarris
cv::HoughLines
HTH
Я думаю, goodFeaturesToTrack() легче использовать для обнаружения Harris-Corner. CornerHarris() необходимо установить изображение для определенного типа.
goodFeaturesToTrack()
CornerHarris()
В зависимости от точки зрения, карта может оказаться не прямоугольником, а скорее трапецией.Вы можете использовать HoughLines2 в OpenCV, чтобы идентифицировать края на изображении и попытаться определить 4 края, которые, скорее всего, являются краями визитной карточки.