OpenCV 3.1 警告和使用 Umat 时崩溃
Posted
技术标签:
【中文标题】OpenCV 3.1 警告和使用 Umat 时崩溃【英文标题】:OpenCV 3.1 warning and crash in usage of UMat 【发布时间】:2017-01-10 23:13:09 【问题描述】:我是使用 OpenCV 的新手。我在 Visual Studio 2013 和 opencv 3.1 中使用 c++。我想计算 Canny 边缘,这是我的代码:
UMat getImage()
return imread("...\\myPic.jpg").getUMat(ACCESS_FAST);
int _tmain(int argc, _TCHAR* argv[])
UMat u;
u = getImage();
cv::Canny(u, u, 100, 50);
namedWindow("Display window", WINDOW_AUTOSIZE);// Create a window for display.
imshow("Display window", u);
getchar();
return 0;
我看不到结果或任何图像。而不是它,我看到了这个窗口:
怎么了?
我注意到如果使用Mat
实例,我可以看到我的照片。
【问题讨论】:
【参考方案1】:你写的代码有两个问题。
1) imshow 不会在没有暂停的情况下正确显示您的图像。您需要在 imshow 之后添加函数 waitkey(0) 以使图像正确显示结果。
2) 在处理 UMat 变量时,最好接收并返回参考矩阵,而不是返回整个矩阵,因为 UMat 内存并不总是在 CPU 空间中。 这是您的代码的外观
void getImage(cv::OutputArray u)
cv::imread("...\\myPic.jpg").getUMat(cv::ACCESS_FAST).copyTo(u);
int main(int argc, const char** argv)
cv::UMat u;
getImage(u);
cv::Canny(u, u, 100, 50);
cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);// Create a window for display.
cv::imshow("Display window", u);
cv::waitKey(0);
getchar();
return 0;
祝你好运
【讨论】:
以上是关于OpenCV 3.1 警告和使用 Umat 时崩溃的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV OpenCL 线程安全 - 死锁(将 cv::Mat 更改为 UMat)
OpenCV TypeError: Expected cv::UMat for argument 'src' - 这是啥?
namedWindow() 导致 opencv 2.3.1 崩溃? (在 XP、C++ 上的 Eclipse+MinGW)