有些东西我无法理解。我正在为我的IOS设备使用OpenCV IOS。
我有一个带有私有变量cv::Rect
的C ++类。此变量位于我的.h文件中。
在我的.cpp文件中,我有一个创建cv::Rect
的方法。然后,我想将这个新创建的cv :: Rect归因于我的类变量,但它崩溃了,我不明白为什么。
.h文件
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文件
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;
}
我看了一下崩溃报告,我看到了:
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.
我还尝试初始化变量cv :: Rect但行为相同。
你知道发生了什么吗?真的,我试图找出原因,但没有成功。 我之前使用过很多OpenCv,这是第一次发生这样的事情。
谢谢!
答案 0 :(得分:0)
Okey我发现了这个问题。这是一个愚蠢的。 实际上,当我使用检测类时,在我的另一个类中,我忘了初始化对象。
Detection _detect = new Detection()
由于我没有从以下行得到任何错误,并且行为似乎很好(即使进行了一些调试),我也没想到。
_detect->processImage(frame);
无论如何,谢谢你们。