2016-08-08 13 views
0

zu attribuieren Es gibt etwas, das ich nicht verstehen kann. Ich verwende OpenCV IOS für mein iOS-Gerät.Seltsamer Absturz, wenn ich versuche, eine Variable in OpenCV IOS

Ich habe eine C++ - Klasse mit einer privaten Variablen cv::Rect. Diese Variable befindet sich in meiner .h-Datei. In meiner .cpp-Datei habe ich eine Methode, die eine cv::Rect erstellt. Dann möchte ich dieses neu erstellte cv :: Rect meiner Klassenvariablen zuweisen, aber es stürzt ab und ich verstehe nicht warum.

.h-Datei

class detection { 


public: 
    detection(); 

    cv::Mat processImage(cv::Mat frame); 

    cv::Mat detectFace(cv::Mat frame); 

public: 
    cv::Rect getRectangleDetection(); 
    void setRectangleDetection(cv::Rect& rect); 


private: 
    cv::Rect _rectangeDetect; 

}; 

CPP-Datei

cv::Mat detection::processImage(cv::Mat frame){ 

    Mat originalColorImage; 
    frame.copyTo(originalColorImage); 
    int cx = frame.cols/2; 
    int cy = frame.rows/2; 
    int width = 1000; 
    int height = 1000; 
    NSLog(@"[INFO] Rectangle creation"); 

    cv::Rect rect1(cx-width/2, cy-height/2, width,height); 

    cv::Rect test2; 
    //test2 = rect1;//It works ! 

    setRectangleDetection(rect1); // or _rectangeDetect = rect1 --> both don't work 

    cv::rectangle(originalColorImage,rect1, 
        cv::Scalar(255, 0, 0),4); 



    return originalColorImage; 
} 

ich im Crash-Bericht einen Blick nahm und ich sah, dass:

exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000 
Triggered by Thread: 0 

Filtered syslog: 
None found 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 detect   0x000000010007f580 cv::Rect_<int>::operator=(cv::Rect_<int> const&) (types.hpp:1689) 
1 detect   0x000000010007f504 OpenCV::setRectangleDetection(cv::Rect_<int>) (OpenCV.mm:172) //This is the setter but If I'm not using the setter the error will come from _rectangleDetect = rect1. 

Ich habe versucht, auch um die Variable cv :: R zu initialisieren ect aber dasselbe Verhalten.

Haben Sie eine Idee, was passiert? Wirklich, ich versuchte herauszufinden, warum, aber ohne Erfolg. Ich habe vorher viel OpenCv benutzt und es ist das erste Mal, dass so etwas passiert.

Vielen Dank!

+0

Können Sie Ihren Code wörtlich zeigen? 'processImage' in Ihrem Beispielcode ist nur eine Funktion, kein Mitglied einer Klasse, während die Variable' _rectangleDetect' ein Member ist. – GarMan

+0

Ich habe den Code hinzugefügt. ProcessImage ist ein Funktionsteil meiner Klasse und _rectangleDetect ist ein Mitglied meiner Klasse. – lilouch

Antwort

0

Okey Ich habe das Problem gefunden. Es war ein dummer. Eigentlich habe ich in meiner anderen Klasse, als ich die Erkennungsklasse verwendete, vergessen, das Objekt zu initialisieren.

Detection _detect = new Detection() 

Da ich keine Fehler aus der folgenden Zeile erhalten haben und durch die Tatsache, dass das Verhalten schien gut zu sein (auch mit einigen debug), ich glaube nicht daran.

_detect->processImage(frame); 

Danke Jungs sowieso.

Verwandte Themen