Есть ли какая-либо причина, по которой OpenCV QRcodeDetector будет работать с одним изображением, но не с другим, используя привязки Objective C с swift?

#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, и я получаю гораздо более последовательные результаты, есть ли оптимальный размер, к которому я должен стремиться?