在哪里/如何在 OpenCV 中放置构建文件

Posted

技术标签:

【中文标题】在哪里/如何在 OpenCV 中放置构建文件【英文标题】:Where/how to place build files in OpenCV 【发布时间】:2013-04-02 03:59:32 【问题描述】:

我刚刚开始使用 OpenCV,我有以下示例 .cpp 文件(来自 opencv.org):

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;

int main( int argc, char** argv )

    Mat image;
    image = imread( argv[1], 1 );

    if( argc != 2 || !image.data )
    
        printf( "No image data \n" );
        return -1;
    

    namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
    imshow( "Display Image", image );

    waitKey(0);

    return 0;

我有以下 CMakeList.cmake 文件:

project(opencvTEST)
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)

find_package(OpenCV REQUIRED)

# Project Executable
add_executable (test test.cpp)
target_link_libraries(test $OpenCV_LIBS)

我有一台 Mac (OS 10.6.8),我已经安装了带有 CMake 的 OpenCV 2.4.3,我搜索了高低并尝试了许多不同的方法来编译这个测试程序(我是使用命令行——没有 IDE),但我得到以下编译错误(显然,由于 include 语句不能正常工作):

test.cpp:3:30: error: opencv2/opencv.hpp: No such file or directory
test.cpp:5: error: ‘cv’ is not a namespace-name
test.cpp:5: error: expected namespace-name before ‘;’ token
test.cpp: In function ‘int main(int, char**)’:
test.cpp:9: error: ‘Mat’ was not declared in this scope
test.cpp:9: error: expected `;' before ‘image’
test.cpp:10: error: ‘image’ was not declared in this scope
test.cpp:10: error: ‘imread’ was not declared in this scope
test.cpp:18: error: ‘CV_WINDOW_AUTOSIZE’ was not declared in this scope
test.cpp:18: error: ‘namedWindow’ was not declared in this scope
test.cpp:19: error: ‘imshow’ was not declared in this scope
test.cpp:21: error: ‘waitKey’ was not declared in this scope

我在与test.cpp 相同的目录中有一个名为opencv2 的文件夹,而opencv.hppopencv2 中,所以我不明白为什么找不到它。有任何想法吗?

另外,一般来说,OpenCV 希望您将源文件(.cpp 等)放在哪里?

【问题讨论】:

很有趣...我不知道&lt;&gt;"" 之间的区别#include 语句。您知道将opencvopencv2(带有头文件的文件夹)复制到/usr/include 目录中是否有缺点吗? 【参考方案1】:

我遇到了完全相同的问题。我从 opencv 教程中运行了相同的示例并得到了相同的错误

error: ‘CV_WINDOW_AUTOSIZE’ was not declared in this scope

我通过添加标题解决了这个问题:

#include <opencv/highgui.h>

【讨论】:

【参考方案2】:

你忘记添加你的 CMakeLists.txt

include_directories($OpenCV_INCLUDE_DIRS)

在find_package(需要OpenCV)之后

【讨论】:

谢谢,刚刚在find_package...前加了,不过好像没什么区别。 尝试添加之后而不是之前 仍然无法正常工作,很遗憾。你知道 OpenCV 是否希望我放置我的源代码的某个目录? @MuffinTheMan 编译器提供了精确的问题 - 没有找到包含。要调试在 find_package 之后添加 message("OpenCV_INCLUDE_DIR = $OpenCV_INCLUDE_DIR") 并查看此 var 指向的位置。也许你只需要使用 #include 而不是 opencv2/opencv.hpp 打印出OpenCV_INCLUDE_DIR = 【参考方案3】:

我希望我确切地知道上面的问题是什么,但我只能猜测这与我在安装 OpenCV 2.4.4 时尝试使用 OpenCV 2.4.3 的事实有关(我我猜这会引起一些冲突)。

我通过删除 OpenCV 2.4.3(刚刚在我放置它的目录上运行 rm -rf)并卸载了 2.4.4(使用自制软件:brew uninstall opencv),让 OpenCV 2.4.4 在我的机器上运行。在采取这些步骤进行清理之后,我运行了以下命令(您必须拥有homebrew):

$ brew update #just in case you're missing updates
$ brew tap homebrew/science #skip this if you already have the science formulae
$ brew install opencv #this took about 15 minutes

最后,我关注了this tutorial,瞧,它成功了!我将此归结为使用不直观的新软件,感到沮丧,并尝试了 273 种不同的方式来运行 OpenCV。我想所有这些加起来就是我不知道的安装,这(我认为)导致了严重的问题。我是唯一一个让 OpenCV 工作如此困难的人吗?

【讨论】:

不,你不是唯一的 :)) ... 只安装一个,我在 Fedora 上尝试这个时遇到了类似的问题。考虑在我的 Mac 上使用 brew - 好建议。所以这意味着我将拥有三个 opencv 内容的副本 - 而且,就像你在上面的帖子中一样,仍然不知道 opencv 真正想要 src 的位置:)) ...你有没有想过? (我在 Eclipse 上尝试 CDT 并且重试次数为 184 --- 看起来我有办法达到 273 次尝试。)大声笑“274 次尝试是魅力”?跨度> 哈哈,273 可能有点夸张;)我希望我能告诉你 src 文件应该在哪里,但我的团队最终放弃了 OpenCV 并改用了 MATLAB。 arrrggg... 昨天尝试了 brew ... 在 :-\ MATLAB 中失败了大约 %73 是吗?好吧,有时用现金支付比使用开源问题要好。如果我能负担得起 MATLAB 或 Wolfram 的演出,我也会把 openCV 扔掉。无论如何感谢您的回复!现在,我把那盒 Excedrin Extra Strength 放在哪里了? ...嗯 不过,调查 brew 失败的原因可能是值得的。迁移到 MATLAB 对我们来说更容易,因为我们不需要支付许可费用(通过我们的大学获得)。【参考方案4】:

还有一个包含路径的包含文件夹:opencv\build\include。完整的标题都在那里,您可以将 OpenCV_INCLUDE_DIR 设置为该目录

【讨论】:

遗憾的是,这似乎对我没有任何帮助。

以上是关于在哪里/如何在 OpenCV 中放置构建文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 包中放置 swiftlint 配置文件?

如何使用 MakeCode 在 Minecraft 中放置半块板

在 Bitnami LAMP Ubuntu 服务器中放置网站文件的位置

在基于 servlet 的应用程序中放置以及如何读取配置资源文件?

如何在标签中放置滑块值?

如何在我的 ag-grid 单元格中放置一个 react jsx 组件