当我尝试在 OpenCV IOS 中归因变量时发生奇怪的崩溃

Posted

技术标签:

【中文标题】当我尝试在 OpenCV IOS 中归因变量时发生奇怪的崩溃【英文标题】:Weird crash when I try to attribute a variable in OpenCV IOS 【发布时间】:2016-08-08 09:38:43 【问题描述】:

有些事情我无法理解。我正在为我的 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,第一次遇到这种情况。

谢谢!

【问题讨论】:

你能逐字显示你的代码吗?示例代码中的 processImage 只是一个函数,而不是类的成员,而变量 _rectangleDetect 是成员。 我添加了代码。 ProcessImage 是我班级的函数部分,_rectangleDetect 是我班级的成员。 【参考方案1】:

好的,我发现了问题。这是一个愚蠢的。 实际上,在我使用检测类时,我在其他类上忘记了初始化对象。

Detection _detect = new Detection()

由于我没有从以下行中得到任何错误,而且行为似乎很好(即使进行了一些调试),所以我没有想到这一点。

_detect->processImage(frame);

还是谢谢你们。

【讨论】:

以上是关于当我尝试在 OpenCV IOS 中归因变量时发生奇怪的崩溃的主要内容,如果未能解决你的问题,请参考以下文章

什么特别允许应用归因显示在来自 iOS 应用的 Facebook 帖子上?

Mongoose:使用 find() 并将值归因于变量时,save() 不是函数

为啥当我在 ios 应用程序中使用 alamofire 时来自服务器的字符串响应会发生变化?

IOS的KMM依赖设置(OpenCV)

Swift归因字符串清除背景文本

OpenCV iOS 和 64 位架构