【问题标题】:cvGetSize gives bad argument errorcvGetSize 给出错误的参数错误
【发布时间】:2013-06-04 03:00:31
【问题描述】:

我正在尝试减少图像的眩光和光反射,然后继续进行更多图像处理。我在网上找到了一段 sn-p 代码,据说可以在一个范围内选择像素,但是当我插入我的算法时,它给了我一个错误。我已经验证我的图像数据不是NULL,所以这不会导致问题。为什么我会遇到断言失败?

错误:

OpenCV 错误:cvGetSize 中的参数错误(数组应为 CvMat 或 IplImage),文件 /Users/user/slave/builds/ios_framework/src/opencv/modules/core/src/array.cpp,第 1238 行 libc++abi.dylib:终止调用抛出异常。

代码:

cv::Mat eye1 = [self cvMatFromUIImage:eye];
cv::Mat eye2;

IplImage imgHSV = *cvCreateImage(cvGetSize(&eye1), 8, 3);    //Assertion fails here
IplImage imgThreshold = *cvCreateImage(cvGetSize(&imgHSV), 8, 1);
cvInRangeS(&imgHSV, cvScalar(0, 0, 90, 0), cvScalar(0, 0, 100, 0) , &imgThreshold);
cv::Mat eye3(&imgThreshold);

原始代码不包含*& 符号,但Xcode 建议我放置它们,但该功能仍然不起作用。

【问题讨论】:

    标签: iphone ios opencv image-processing


    【解决方案1】:

    您得到的错误是因为eye1 既不是CvMat* 也不是IplImage*,这是cvGetSize() 所期望的,而是cv::Mat。您需要了解这三种是不同的类型。 cv::Mat 是 C++ API 的一部分,而 CvMatIplImage 属于 C API,已被弃用。最好不要将两者混为一谈。

    看起来你想使用cv::inRange()函数,可能是这样的:

    cv::inRange(eye1, cv::Scalar(0,0,90,0), cv::Scalar(0,0,100,0), eye2);
    

    然后您可以省去IplImage 变量和相关的手动内存管理。

    【讨论】:

    • 我还建议彻底阅读 OpenCV 的 documentation 以熟悉它。特别是因为尝试使用cv::inRange() 会导致图像变黑,而不是您所期望的。
    • 我试图消除图像中的眩光,我知道我必须调整标量值才能使其工作,并且我根据语言获得不同类型的概念,问题是我使用 iOS这是Objective-C,没有关于使用什么的细节,没有足够的教程或opencv和ios示例
    • 我无法准确理解您想要什么。您还可以编写 Objective-C++,它允许充分利用 OpenCV 的 C++ API。
    • 我正在尝试从图像中去除眩光,这样我就可以继续对图像进行一些过滤和其他操作,但我需要去除眩光,因为它会破坏整体算法和准确度我正在尝试做。
    • 我了解您的总体目标。听起来您在尝试使用 Objective-C 时遇到了问题。是这样吗?如果不是,您的具体问题是什么?
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2020-10-16
    相关资源
    最近更新 更多