我将带有外部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)
我已经挖了一段时间但没有结果.我究竟做错了什么?
小心!
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)
| 归档时间: |
|
| 查看次数: |
1834 次 |
| 最近记录: |