使用OpenCV显示图像时发生异常 [英] Exception when showing an Image with OpenCV

查看:1581
本文介绍了使用OpenCV显示图像时发生异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用OpenCV函数'imshow()'显示图像.

I try to show an Image with the OpenCV-function 'imshow()'.

 cv::Mat im = cv::imread("/home/franek/Schreibtisch/image.jpg",cv::IMREAD_GRAYSCALE);
 cv::imshow("original", im);

现在它告诉我:

OpenCV错误:cvtColor中的声明失败(scn == 3 || scn == 4),文件/build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/color.cpp,行9716 抛出'cv :: Exception'实例后调用终止 what():/build/opencv-L2vuMj/opencv-3.2.0 + dfsg/modules/imgproc/src/color.cpp:9716:错误:(-215)scn == 3 ||函数cvtColor中的scn == 4

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/color.cpp, line 9716 terminate called after throwing an instance of 'cv::Exception' what(): /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/color.cpp:9716: error: (-215) scn == 3 || scn == 4 in function cvtColor

当我将cv::IMREAD_GRAYSCALE替换为cv::IMREAD_COLOR时,将显示图片,并且一切都很好.但是我需要一个灰度图像.

When I replace cv::IMREAD_GRAYSCALE with cv::IMREAD_COLOR, the picture is shown and everything is fine. But I need a grayscale image.

修改:整个代码:

cv::namedWindow("original", cv::WINDOW_GUI_EXPANDED);
  cv::namedWindow("grayScale", cv::WINDOW_GUI_EXPANDED);
  cv::namedWindow("cornerImage", cv::WINDOW_GUI_EXPANDED);
  cv::startWindowThread();

  cv::Mat im = cv::imread("/home/franek/Schreibtisch/image.jpg", cv::IMREAD_COLOR);
  cv::imshow("original", im);
  cv::waitKey(0);
  cv::Mat img = cv::imread("/home/franek/Schreibtisch/image.jpg", cv::IMREAD_GRAYSCALE);
  cv::imshow("grayScale", img);
  cv::waitKey(0);

编辑 用ldd我发现了依赖关系:

edit edit: with ldd i found out the dependencies:

libopencv_imgcodecs.so.3.2 =>/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2(0x00007f2ba95d0000) libopencv_imgproc.so.3.2 =>/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.3.2(0x00007f2ba8d77000) libopencv_core.so.3.2 =>/usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2(0x00007f2ba893c000) libopencv_highgui.so.4.1 =>/usr/local/lib/libopencv_highgui.so.4.1(0x00007f2ba8724000) libopencv_imgcodecs.so.4.1 =>/usr/local/lib/libopencv_imgcodecs.so.4.1(0x00007f2ba7e72000) libopencv_imgproc.so.4.1 =>/usr/local/lib/libopencv_imgproc.so.4.1(0x00007f2ba557e000) libopencv_core.so.4.1 =>/usr/local/lib/libopencv_core.so.4.1(0x00007f2ba429b000)

libopencv_imgcodecs.so.3.2 => /usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2 (0x00007f2ba95d0000) libopencv_imgproc.so.3.2 => /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.3.2 (0x00007f2ba8d77000) libopencv_core.so.3.2 => /usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2 (0x00007f2ba893c000) libopencv_highgui.so.4.1 => /usr/local/lib/libopencv_highgui.so.4.1 (0x00007f2ba8724000) libopencv_imgcodecs.so.4.1 => /usr/local/lib/libopencv_imgcodecs.so.4.1 (0x00007f2ba7e72000) libopencv_imgproc.so.4.1 => /usr/local/lib/libopencv_imgproc.so.4.1 (0x00007f2ba557e000) libopencv_core.so.4.1 => /usr/local/lib/libopencv_core.so.4.1 (0x00007f2ba429b000)

这是解决方案吗?内核和highui版本不同...

Is that the solution? The core and the highui aren't the same version...

推荐答案

我找到了解决方案, 问题是,我的代码依赖于< <cv_bridge/cv_bridge.h>中的另一个函数,这是一个 ROS 特定库. 该库使用Opencv 2.3.我使用叉子,有人在此处将该库移植到OpenCV 4.现在整个事情都很好!

I found the solution, the Problem was, that my Code depends in another function from < <cv_bridge/cv_bridge.h> this is a ROS Specific lib. This lib uses Opencv 2.3. I head to use a fork, where someone ported this lib to OpenCV 4 here. Now the whole thing works just fine!

这篇关于使用OpenCV显示图像时发生异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆