#c #swift #opencv #qr-code #objective-c
Вопрос:
Я пытаюсь использовать OpenCV для обнаружения QR-кода на неподвижном изображении, а затем определить его положение на изображении. Я успешно подключил библиотеку OpenCV, и на примере изображений код OpenCV в большинстве случаев не обнаруживает QR-код, однако код для обнаружения QR-кода в swift работает каждый раз, поэтому я знаю, что это не проблема с изображением. Я искал документы на веб-сайте OpenCV безрезультатно. Причина, по которой я хочу использовать OpenCV для определения QR-кода и позиции, заключается в том, чтобы выполнить дальнейшие манипуляции с изображением, и было бы полезно иметь позиции на изображении коврика.
Пожалуйста, обратите внимание, что я студент, который многое пробует в первый раз.
Swift-код
func detectQRCode(_ image: UIImage?) -> [CIFeature]? {
if let image = image, let ciImage = CIImage.init(image: image){
var options: [String: Any]
let context = CIContext()
options = [CIDetectorAccuracy: CIDetectorAccuracyHigh]
let qrDetector = CIDetector(ofType: CIDetectorTypeQRCode, context: context, options: options)
if ciImage.properties.keys.contains((kCGImagePropertyOrientation as String)){
options = [CIDetectorImageOrientation: ciImage.properties[(kCGImagePropertyOrientation as String)] ?? 1]
} else {
options = [CIDetectorImageOrientation: 1]
}
let features = qrDetector?.features(in: ciImage, options: options)
return features
}
return nil
}
//qr code
if let features = detectQRCode(displayPhoto.image), !features.isEmpty{
for case let row as CIQRCodeFeature in features{
print(row.messageString ?? "nope")
print(row.bounds)
print(row.topLeft)
print(row.bottomLeft)
print(row.topRight)
print(row.bottomRight)
// print(row.)
}
}
Вызов оболочки OpenCV:
print("(OpenCVWrapper.decodeQRCode(displayPhoto.image!))")
Вызов чистого кода на C
(NSString *) decodeQRCode: (UIImage *)inputImage {
Mat mat = [inputImage CVMat];
string qrcode = detectAndDecode(mat);
return [NSString stringWithFormat: @"Data stored in the QR code is %s", qrcode.c_str()];
}
Finally c code
QRCodeDetector qrDecoder = QRCodeDetector();
String detectAndDecode (Mat mat){
vector<Point> points;
String data = qrDecoder.detectAndDecode(mat, points);
return data;
}
Любые подсказки, подсказки или советы будут высоко оценены. И если кто-нибудь знает о каких-либо проектах, которые позволяют мне обнаруживать QR-код и находить значения пикселей определенных областей в остальной части изображения по отношению к QR, это было бы очень полезно.
Редактировать: Я изменил размер изображения до (1200X800) перед использованием функции detectAndDecode, и я получаю гораздо более последовательные результаты, есть ли оптимальный размер, к которому я должен стремиться?