【发布时间】:2019-07-18 17:56:23
【问题描述】:
我尝试使用 OpenCV 函数“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' 的实例后调用终止 什么():/build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/color.cpp:9716:错误:(-215)scn == 3 ||函数 cvtColor 中的 scn == 4
当我将cv::IMREAD_GRAYSCALE 替换为cv::IMREAD_COLOR 时,图片显示并且一切正常。但我需要一张灰度图。
编辑:整个代码:
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不是同一个版本...
【问题讨论】:
-
您需要提取并提供minimal reproducible example,否则您的问题将是题外话。无论如何,使用调试器获取回溯并检查程序状态以深入了解问题。
-
错误消息说你的错误是使用
cv::cvtColor()而不是cv::imshow()。请贴出相关代码。 -
@ShawnMathew 我知道,错误来自
cv::cvtColor()。 @UlrichEckhardt StackTrace 显示,函数cv:cvtColor()在内部调用了一些函数,并且在 TraceEnd 上有对cv::cvtColor()的调用。我发现,异常说“嘿,你想将 RGB 转换为灰度,但你的输入图像只有一个通道”,但我不知道,为什么imShow()想要转换图像。 -
@Franek 是您的应用程序中与
im相关的仅有的两行代码吗?如果在阅读框架和显示框架之间有什么问题,请发布。 -
@ShawnMathew,不,上面只有一行,创建 Imview。