cvtColor在转换时崩溃

Qbu*_*3kZ 1 opencv c++-cli

我将带有外部dll的相机加载到我的OpenCV程序中.我可以看到框架 cv::imshow("edges", frame);,一切都很好.frame.channels()给了我3个频道,但是当我尝试cv::cvtColor(frame, gray, CV_BGR2GRAY);应用程序崩溃时.

CreateImage(System::Byte *imgData, int height, int width,int show)
{

    frame = cv::Mat(height, width, CV_8UC3, imgData);

    if (show > 0)
        cv::imshow("edges", frame); //I can see myself

    return frame.channels(); //three channels
}

void ConvertAndProcess()
{
    cv::Mat gray;

    cv::cvtColor(frame, gray, CV_BGR2GRAY); //crash...

    //do something
}
Run Code Online (Sandbox Code Playgroud)

我已经挖了一段时间但没有结果.我究竟做错了什么?

ber*_*rak 5

小心!

 frame = cv::Mat(height, width, CV_8UC3, imgData);
Run Code Online (Sandbox Code Playgroud)

这是一个"借来的"指针.当imgData离开作用域时(在函数末尾),frame.data无效.

这意味着,如果你以这种方式构造它,你不能指望frame在ConvertAndProcess()中有效.

你可以克隆()它,以实现'深层复制':

 frame = cv::Mat(height, width, CV_8UC3, imgData).clone();
Run Code Online (Sandbox Code Playgroud)