【问题标题】:OpenCV error: Assertion failed on iOSOpenCV 错误:iOS 上的断言失败
【发布时间】:2018-01-14 00:12:21
【问题描述】:

我正在尝试查找图像中最大的 blob 并根据链接的 plist 文件对其进行分类。我正在使用适用于 iOS 的最新版本的 OpenCV,我已经查看了几个相关的问题,但到目前为止没有一个与 iOS 相关。

我收到此错误:

OpenCV 错误:断言失败 (type == src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U)) 在 batchDistance,文件 /Users/admin/Desktop /OpenCV/modules/core/src/stat.cpp,第 4000 行

libc++abi.dylib:以 cv::Exception 类型的未捕获异常终止:/Users/admin/Desktop/OpenCV/modules/core/src/stat.cpp:4000: error: (-215) type = = src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U) in function batchDistance

当我运行这个时:

- (IBAction)CaptureButton:(id)sender
  {
       // Find the biggest blob.
       int biggestBlobIndex = 0;
       for (int i = 0, biggestBlobArea = 0; i < detectedBlobs.size(); i++)
       {
          Blob &detectedBlob = detectedBlobs[i];
          int blobArea = detectedBlob.getWidth() * detectedBlob.getHeight();
          if (blobArea > biggestBlobArea)
          {
              biggestBlobIndex = i;
              biggestBlobArea = blobArea;
          }
       }

       Blob &biggestBlob = detectedBlobs[biggestBlobIndex];

       // Classify the blob.
       blobClassifier->classify(biggestBlob); // the error occurs here
  }

我在最后一行调用的classify 在另一个文件中声明:

void classify(Blob &detectedBlob) const;

这是来自 stat.cpp 的相关代码:

Mat src1 = _src1.getMat(), src2 = _src2.getMat(), mask = _mask.getMat();
int type = src1.type();

CV_Assert( type == src2.type() && src1.cols == src2.cols &&
           (type == CV_32F || type == CV_8U)); // this is line 4000

这里有什么问题?

【问题讨论】:

  • 对所列属性之一的断言失败。找出哪一个,为什么并解决它。你知道调试器是什么吗?
  • @Piglet 是的,但我不确定如何找到导致错误的属性。
  • 您可以在 stat.cpp 中的第 3934 行之前添加一个断点并查看值。
  • @Piglet 问题是 stat.cpp 不在这个 Xcode 项目中;它与 OpenCV 框架位于同一目录中。当我在相关行上放置断点时,什么也没有发生,因为它们不在同一个项目中。

标签: ios objective-c opencv image-processing


【解决方案1】:

我不知道 cv::Mat 对象在目标 c 中的外观如何,但是您需要确保与分类器一起使用的图像的所有尺寸、通道数和深度都是统一的。当您向分类器提供训练图像时,可能之前有一个步骤。也许其中一个与您尝试分类的垫子不兼容。

如果您自己编译并在 CMake 中设置调试版本,您可以尝试使用 opencv 进行调试。

【讨论】:

  • 所以问题是因为我所有的训练图像都是不同尺寸的?
  • 有没有办法在保持不同维度的训练图像的同时仍然具有应用功能?
  • 该问题可能是由您的图片尺寸不同引起的。至于第二个问题,您可以尝试裁剪图像或填充缺失的空间以获得正确的尺寸。或者问另一个关于对非统一尺寸图像集进行分类的问题。
  • 你知道如何对一组非均匀维度的图像进行分类吗?
猜你喜欢
  • 1970-01-01
  • 2014-01-04
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 2017-10-26
  • 2016-11-27
相关资源
最近更新 更多