C++ 使用OpenCV显示图像时出现异常
我尝试使用OpenCV函数“imshow()”显示图像 现在它告诉我: OpenCV错误:cvtColor文件/build/OpenCV-L2vuMj/OpenCV-3.2.0+dfsg/modules/imgproc/src/color.cpp第9716行中的断言失败(scn==3 | | scn==4) 在引发“cv::Exception”的实例后调用terminate what():/build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/color.cpp:9716:函数cvtColor中的错误:(-215)scn==3 | | scn==4 当我用C++ 使用OpenCV显示图像时出现异常,c++,opencv,imshow,C++,Opencv,Imshow,我尝试使用OpenCV函数“imshow()”显示图像 现在它告诉我: OpenCV错误:cvtColor文件/build/OpenCV-L2vuMj/OpenCV-3.2.0+dfsg/modules/imgproc/src/color.cpp第9716行中的断言失败(scn==3 | | scn==4) 在引发“cv::Exception”的实例后调用terminate what():/build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc
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的版本不一样…我找到了解决方案,
问题是,我的代码依赖于另一个函数,这是一个特定的库。
这个库使用Opencv 2.3。我开始使用fork,有人将这个lib移植到opencv4。现在整个事情都很顺利 如果要使用正确的设置编译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您需要提取并提供一个,如果没有这个,您的问题就离题了。无论如何,请使用调试器获取回溯并检查程序状态,以了解问题。错误消息表示您的错误是在使用
cv::cvtColor()
而不是cv::imshow()时发生的。请发布相关代码。@Shawn我知道,错误来自cv::cvtColor()
@UlrichEckhardt堆栈跟踪显示,函数cv:cvtColor()
在内部调用一些函数,并且在跟踪上有对cv::cvtColor()
的调用。我发现,例外情况是“嘿,你想用RGB把东西转换成灰度,但是你的inputimage只有一个通道”,但我不知道,为什么imShow()
要转换图像。@Franek你的应用程序中只有这两行代码与im
有关吗?如果在读取帧和显示帧之间有任何区别,请将其发布。@ShawnMathew,不,上面只有一行是创建Imview的地方。
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