带有 C++ 的 OpenCV 无法编译

Posted

技术标签:

【中文标题】带有 C++ 的 OpenCV 无法编译【英文标题】:OpenCV with C++ won't compile 【发布时间】:2016-07-19 20:36:54 【问题描述】:

我一直在关注this 使用 OpenCV 和 C++ 的教程,并使用以下代码读取图像。

#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main()

 Mat img = imread("map.png", CV_LOAD_IMAGE_UNCHANGED); //read the image data in the file "MyPic.JPG" and store it in 'img'

 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;
 

 namedWindow("MyWindow", CV_WINDOW_AUTOSIZE); //create a window with the name "MyWindow"
 imshow("MyWindow", img); //display the image which is stored in the 'img' in the "MyWindow" window

 waitKey(0); //wait infinite time for a keypress

 destroyWindow("MyWindow"); //destroy the window with the name, "MyWindow"

 return 0;

我在 vi 中创建了一个简单的 .cpp 文件并尝试使用 g++ -o test test.cpp.

我检查了一下,我在 /usr/bin 中有 OpenCV。 这些是我在编译时遇到的错误:

error: opencv2/highgui/highgui.hpp: No such file or directory
error: ‘cv’ is not a namespace-name
error: expected namespace-name before ‘;’ token
In function ‘int main()’:
error: ‘Mat’ was not declared in this scope
error: expected ‘;’ before ‘img’
error: ‘img’ was not declared in this scope
error: ‘CV_WINDOW_AUTOSIZE’ was not declared in this scope
error: ‘namedWindow’ was not declared in this scope
error: ‘img’ was not declared in this scope
error: ‘imshow’ was not declared in this scope
error: ‘waitKey’ was not declared in this scope
error: ‘destroyWindow’ was not declared in this scope

我正在使用 RHEL 6。 我能做些什么来解决这个问题?谢谢!

【问题讨论】:

opencv2/highgui/highgui.hpp 与 test.cpp 的关系在哪里?您的编译器抱怨找不到该文件,因此需要先修复它。 @RomSteady 我从教程中复制了它,所以我认为它是标准语法。在 /usr/bin 中,我有文件 opencv_createsamples、opencv_haartraining、opencv_performance 和 opencv_traincascade。我应该用其中之一替换 opencv2/highgui/highgui.hpp 吗? 【参考方案1】:

我在使用 CentOS 7 时遇到了同样的问题(和你几乎一样的操作系统)

我能够编译它的唯一方法是在 OpenCV 文档中使用 CMake 的 these 指令。

但基本上...

1) 将您的程序源放在一个空文件夹中。

2) 使用这些行在同一文件夹中创建一个 CMakeLists.txt 文件...

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage $OpenCV_LIBS )

注意:如果您需要额外的标志,这部分还有几行,但这是一个不同的主题......

3) 然后运行这些 bash 命令...

$cd <DisplayImage_directory>
$cmake .
$make

如果这不起作用,那么 OpenCV 在他们的文档中有另外两种方法来说明如何做到这一点。

【讨论】:

好建议,但要使这个答案持久,请总结链接的内容,以便未来的读者在链接失效时重新创建步骤。 我按照这些说明进行操作,但很遗憾没有奏效。谢谢你的链接!

以上是关于带有 C++ 的 OpenCV 无法编译的主要内容,如果未能解决你的问题,请参考以下文章

如果无法创建 vcxproj 文件,是不是可以将 MSBuild 用作带有 Visual Studio 代码的 C++ 编译器?

检查 OpenCV 是不是使用来自 C++ 代码的 GTK 支持进行编译

“程序无法启动,因为您的计算机中缺少 opencv_world300.dll”C++ 中的错误

之前配置过opencv 现在用vs2010 打代码每次都没法编译,求解决无法打开文件"opencv_world320.lib

在 mac os x sierra 上使用 opencv c++ 编译 hello world

无法使用 OpenCV 4 (C++) 创建 FisherFaceRecognizer