使用 OpenCV 显示图像时出现异常

Exception when showing an Image with OpenCV

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

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

现在它告诉我:

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_COLOR替换cv::IMREAD_GRAYSCALE时,显示图片,一切正常。但是我需要一张灰度图。

编辑:整个代码:

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 我发现了依赖关系:

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)

这是解决方案吗? core和highui不是同一个版本...

我找到了解决方案, 问题是,我的代码依赖于 < <cv_bridge/cv_bridge.h> 的另一个函数,这是一个 ROS 特定的库。 这个库使用 Opencv 2.3。我开始使用 fork,有人将这个 lib 移植到 OpenCV 4 here。现在一切正常了!

如果您要使用正确的设置编译 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

须藤安装