OpenCV imread无声失败的原因?

时间:2016-01-08 19:37:10

标签: c++ opencv

我是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,看看是否会解决任何问题。

2 个答案:

答案 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)