【问题标题】:Unrecognized or unsupported array type in cvGetMatcvGetMat 中无法识别或不支持的数组类型
【发布时间】:2017-11-21 06:42:29
【问题描述】:

我在这里搜索了一下,但似乎没有人有同样的错误,我正在尝试在树莓派上创建一个颜色检测相机,我使用了

https://github.com/robidouille/robidouille/tree/master/raspicam_cv

为了教程并让它工作,但现在当我有

IplImage* image = raspiCamCvQueryFrame(capture);
cv::cvtColor(cv::Mat(image), x, cv::COLOR_BGR2HSV);

它会编译,但运行时会给出

函数 cvGetMat 中无法识别或不支持的数组类型

没有 cv::Mat(image) 我无法编译,因为

从“IplImage*”类型的表达式中对“cv::InputArray”类型的引用的初始化无效

【问题讨论】:

  • 您正在混合界面。 IplImage 来自旧的cv 接口,而Mat 是新接口的一部分。坚持一个或另一个。
  • 教程使用了C,所以我需要继续用C编程吗?还是我需要继续使用 IplImage,如果是这样,那么我如何将方法 (cv::cvtColor()) 与 IplImages 一起使用?
  • 您需要找到 C 等效项才能这样做。在这里查看:docs.opencv.org/modules/imgproc/doc/… - 请查看 C 定义。

标签: c++ opencv raspberry-pi


【解决方案1】:

如 cmets 中所述,最好使用新的 C++ 接口。

以下代码将在窗口中显示来自网络摄像头的提要,当按下“q”时程序将终止:(source)

#include "opencv2/highgui/highgui.hpp"

int main(int argc, const char** argv) {
    cv::VideoCapture capture;
    cv::Mat image;

    // Unless you need to get images from multiple devices,
    // using '-1' will automatically select the webcam.
    capture.open(-1);
    if (capture.isOpened()) {
        cv::namedWindow("WebCam", cv::WINDOW_AUTOSIZE);
        while (1) {
            capture.read(image);
            cv::imshow("WebCam", image);
            int c = cv::waitKey(10);
            if ((char)c == 'q') {
                break;
            }
        }
    }

    capture.release();

    return 0;
}

我已经在 Ubuntu 14.04 上测试过这段代码,并像这样编译它:

$ clang++ -o cvtest cvtest.cpp -lopencv_core -lopencv_highgui

如果你拼命想继续使用IplImage和C接口,那我帮不了你。

【讨论】:

  • 我不想使用 IplImage,但这是从树莓派相机模块获取输入到 c++ 代码中的唯一方法,没有网络摄像头
  • 抱歉回避了您的问题。如果您在混合两个接口时遇到问题,请尝试仅使用 C 接口函数来处理图像;他们很好documented
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多