我是openCV和C / C ++的新手。我正在研究this教程并使用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 << "start\n";
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} )
有关为何导致此问题的任何见解?
修改
上面的代码是为了解释我是如何调试的,以及导致问题的原因;我已经尝试通过检查图像大小和其他方法来捕获故障,将其隔离为系统/配置问题。根据{{3}}帖子,我正在从源代码重建openCV,看看是否会解决任何问题。
答案 0 :(得分:3)
首先,您需要确保问题是找到图像,所以请不要跳过这部分代码:
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
答案 1 :(得分:0)
不是完整的答案,这只是一张纸条。
&#34; MyPic.jpg&#34;需要位于运行二进制文件/程序的同一目录中,与编译时的实现文件(.cpp)无关。
要让cmake自动将文件从源目录复制到构建目录,请将以下内容添加到CMakeLists.txt:
configure_file(MyPic.jpg MyPic.jpg COPYONLY)