OpenCV imread静默失败的原因
Reasons for OpenCV imread to silently fail?
我是openCV和C/C++的新手。我正在学习本教程,并使用CMake生成我的makefile。我构建第一个程序(读取和显示)没有问题,但当我运行可执行文件时,什么都不会发生,我必须关闭我的终端,因为它只是挂起。即使我只使用以下代码,也会发生这种情况:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main( int argc, const char** argv )
{
cout << "startn";
Mat img = imread("MyPic.jpg");
return 0;
}
当我删除Mat img
行时,会输出"start",但当我包含它时,甚至不会发生这种情况。MyPic.jpg肯定和ReadDisplay.cpp和CMakeLists.txt在同一个目录中。我运行的是Ubuntu 14.04。最后,这里是CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project( ReadDisplay )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( ReadDisplay ReadDisplay.cpp )
target_link_libraries( ReadDisplay ${OpenCV_LIBS} )
关于为什么会出现问题,有什么见解吗?
编辑
上面的代码解释了我是如何调试的,以及是什么导致了问题;我已经尝试过通过检查图像大小和其他方法来捕捉故障,将其作为系统/配置问题进行隔离。根据这篇文章,我正在从源代码重建openCV,看看这是否能解决任何问题。
首先你需要确保问题是找到图像,所以请不要跳过这部分代码:
if (img.empty()) //check whether the image is loaded or not
{
cout << "Error : Image cannot be loaded..!!" << endl;
//system("pause"); //wait for a key press
return -1;
}
因此,如果问题是查找图像,为了避免混淆,可以通过绝对路径,如:/home/user/my_pic.jpg
不是一个完整的答案,这只是一个注释。
"MyPic.jpg"需要位于运行二进制/程序的同一目录中,与编译时的实现文件(.cpp)无关。
要让cmake自动将文件从源目录复制到构建目录,请将以下内容添加到CMakeLists.txt中:
configure_file(MyPic.jpg MyPic.jpg COPYONLY)
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- 如何让LLDB在成功时退出,在失败时等待
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- OpenCV:提供给imread()的链接失败
- OpenCV imread静默失败的原因
- 尝试使用 imread() 和 imshow() 引发 OpenCV 错误:断言失败(size.width>0 && size.height>0)