简体   繁体   English

使用OpenCV显示图像时发生异常

[英]Exception when showing an Image with OpenCV

I try to show an Image with the OpenCV-function 'imshow()'. 我尝试使用OpenCV函数'imshow()'显示图像。

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

Now it tells me: 现在它告诉我:

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 || 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 || scn == 4 in function cvtColor scn == 4在函数cvtColor中

When I replace cv::IMREAD_GRAYSCALE with cv::IMREAD_COLOR , the picture is shown and everything is fine. 当我将cv::IMREAD_GRAYSCALE替换为cv::IMREAD_COLOR ,将显示图片,并且一切都很好。 But I need a grayscale image. 但是我需要一个灰度图像。

Edit : the whole code: 编辑 :整个代码:

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);

edit edit: with ldd i found out the dependencies: 编辑编辑:用ldd我发现了依赖项:

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.2(0x000074000) 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.4.1 > /usr/local/lib/libopencv_core.so.4.1(0x00007f2ba429b000)

Is that the solution? 那是解决方案吗? The core and the highui aren't the same version... 核心和highui不是同一版本...

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. 我找到了解决方案,问题是我的代码依赖于< <cv_bridge/cv_bridge.h>另一个函数,这是一个ROS特定库。 This lib uses Opencv 2.3. 该库使用Opencv 2.3。 I head to use a fork, where someone ported this lib to OpenCV 4 here . 我头用叉子,如果有人移植这个lib加入OpenCV的4 这里 Now the whole thing works just fine! 现在整个事情都很好!

You can resolve your problem if you are going to compile opencv with the correct settings: 如果要使用正确的设置编译opencv,则可以解决问题:

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv
mkdir build
cd build/
cmake -D CMAKE_BUILD_TYPE=DEBUG -D CMAKE_INSTALL_PREFIX=/opt/opencv -D \ WITH_V4L=ON BUILD_EXAMPLES=ON -D WITH_OPENGL=ON -D \ OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
make -j4

sudo make install 须藤使安装

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM