OpenCV导致EXC_BAD_ACCESS线程1:code=2在UIApplicationMain中崩溃

OpenCV causing EXC_BAD_ACCESS Thread 1: code=2 crashes in UIApplicationMain

本文关键字:UIApplicationMain code 崩溃 EXC 导致 BAD ACCESS OpenCV 线程      更新时间:2023-10-16

帮助:

它在设备上崩溃。它在模拟器中崩溃。但它不会在仪器工具中崩溃。我承认,我仍在学习如何使用仪器工具,可能没有设置正确的设置来捕捉错误。但我已经为此工作了好几天,这让我抓狂。我的所有代码似乎都执行得非常好。我正在使用NSNotificationCenter进行回调。当执行返回到视图并且数据在我的代码中设置时,数据就在那里视图即将显示新数据时会出现问题相反,视图消失,应用程序由于EXC_BAD_ACCESS错误而崩溃。我完全被难住了。

我对NSZombie如何使用Instruments工具感到困惑。有些说明说您不能将NSZombiesEnabled与Instruments工具一起使用。我也没能成功地查看日志。也许我试图查看错误的日志,因为我查看的日志似乎不是人类可读的格式。

我几乎99.9%相信,当我们开始(在C++中)将CVMat位图转换为灰度级进行处理,在C++中处理图像,然后在C++中转换回彩色进行显示时,问题就开始了。但是,即使在它周围放置一个try/catch块也没有捕捉到错误。Objective-C中的回调接收一个UIImage。

异步调用,多种语言,包装器,OpenCV库,很多故障点。我相信,出于多种原因,我必须成为仪器工具的专家,但现在我迫切希望得到任何建议。

我现在正在学习Ray Wenderlich教程,但很感激其他可能遇到过类似问题的人提供的信息。

我真正希望发现的是,其他人在代码处理完成后,在Assembly代码中的某个地方出现了这个错误,就像我身上发生的那样。我无法放置任何断点,因为它似乎没有发生在我的代码中。但经过一番耐心和多看几眼,我终于找到了根本原因。

这是一个OpenCV问题我将错误缩小到发生错误的方法(这并不容易,因为它在调用时没有停止),但在将cvMatFromUIImage方法拆分为两个方法(一个将图像转换为cv::Mat,另一个更改颜色)后,错误消失了。

- (cv::Mat)cvMatFromUIImage:(UIImage *)image
{
CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
CGFloat cols = image.size.width;
CGFloat rows = image.size.height;
cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels (color channels + alpha)
CGContextRef contextRef = CGBitmapContextCreate(cvMat.data,                 // Pointer to  data
cols,                       // Width of bitmap
rows,                       // Height of bitmap
8,                          // Bits per component
cvMat.step[0],              // Bytes per row
colorSpace,                 // Colorspace
kCGImageAlphaNoneSkipLast |
kCGBitmapByteOrderDefault); // Bitmap info flags
CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage);
CGContextRelease(contextRef);
return cvMat;
}
- (cv::Mat)convertToRGB:(cv::Mat)grayMat
{
cv::Mat rgbMat;
cv::cvtColor(grayMat, rgbMat, CV_RGBA2RGB);
return rgbMat;
}

我希望这能帮助其他人!

相关文章:
  • 没有找到相关文章