精华内容
下载资源
问答
  • ROS多个头文件和多个源文件建立 初衷:想要将队里的自瞄代码加上ros跑,但是苦于自己研究多时,走了许多弯路,几经周折才学会头文件的添加,希望读者们能从我这篇文章学会点东西。 环境: ubuntu18.04+ROS melodic+...

    ROS多个头文件和多个源文件建立

    初衷:想要将队里的自瞄代码加上ros跑,但是苦于自己研究多时,走了许多弯路,几经周折才学会头文件的添加,希望读者们能从我建立工程中也学会自己建立多个头文件和源文件。

    环境:
    ubuntu18.04+ROS melodic+vscode(一开始用文档编辑)+C++

    目标:把该工程搞成ros能运行
    在这里插入图片描述
    如图所示,我需要加很多个.h和很多个.c 。

    不管三七二十一,先建立一个功能包(工作空间为catkin_ws)

    catkin_create_pkg AI_xx sensor_msgs cv_bridge roscpp std_msgs image_transport

    我建立了一个名为AI_xx的功能包,后面的是需要用到的包(这里不需要cv_bridge,我直接copy别人的)。

    cd catkin_ws
    catkin_make
    cd src
    cd AI_xx
    cd src

    先编译一下,再进入src
    我把全部.cpp文件全部copy了过来

    在这里插入图片描述
    然后(重要)去到AI_xx 的include里面还有个AI_xx,
    把所有对应的头文件copy到那里
    在这里插入图片描述
    里面有另外的文件我待会讲,反正需要的头文件都在这了。
    接下来就是重头戏cmake的编写↓

    打开
    在这里插入图片描述
    由于用到opencv,我这里先加了opencv的地址,本人的版本是4.1.0

    先用set(),放在find_package()的上面,find_package()里面一定要加OpenCV REQUIRED,

    小伙伴可能会问OpenCV REQUIRED里面的OpenCV要不要加个4,不用!
    在这里插入图片描述
    这里我把cv_bridge注释掉了和加了一个message,先不管。

    下面加一句在这里插入图片描述
    include_directories(include ${OpenCV_INCLUDE_DIRS})
    大概是链接到opencv的意思,加就对了

    这个
    link_directories(
    lib
    ${catkin_LIB_DIRS}
    )
    先不管,不用加

    要想程序跑起来,得先建立一个可执行程序在这里插入图片描述
    add_executable(main src/main.cpp)
    这句话是把main.cpp生成了一个名为main的程序,后面那些如src/run.cpp的下面再讲
    同时得在main.cpp写一个节点,
    如图:
    在这里插入图片描述
    我写了一个名为armor的节点,这里就一句话就行。。。。。摸索很多遍才知道。对应头文件得加上ros需要的头文件
    #include <ros/ros.h>
    #include <image_transport/image_transport.h>
    #include <cv_bridge/cv_bridge.h>
    #include <sensor_msgs/image_encodings.h>
    如图
    在这里插入图片描述
    即,在configure.h里包含了上述头文件,你们要直接加在main.cpp里也行,我这里还是尽量按照队里的规范写吧。。

    返回cmake那里,还有两句话
    add_dependencies(main KaTeX parse error: Expected '}', got 'EOF' at end of input: {{PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
    target_link_libraries(main ${catkin_LIBRARIES} ${OpenCV_LIBS} MVSDK)

    大概意思是把main 连接到整体吧,加就对了

    然后可以开始复制粘贴了,,如下↓

    在这里插入图片描述
    读者们有没有发现每三句话都是一样的格式,变的只是对应文件罢了,而这些文件都是需要加的各个头文件和源文件。如:
    add_library(run include/AI_xx/run.h src/run.cpp)
    add_dependencies(run KaTeX parse error: Expected '}', got 'EOF' at end of input: {{PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
    target_link_libraries(run ${catkin_LIBRARIES} ${OpenCV_LIBS})

    add()函数大概是将include/AI_xx下的run.h 和src里的run.cpp结合生成名为run的连接文件,并由后面两句话来加到整体去。
    然后就是把每一个要用到的都进行copy,改改文件名字,

    之后就是得在这里加你用了什么(接上面的main.cpp那)
    如:在这里插入图片描述
    大概意思是需要的cpp都加到了可执行文件main里,如这些src/run.cpp和后面的。

    还有一步!!
    进入每一个cpp文件,修改头文件路径,如图
    在这里插入图片描述
    在这里插入图片描述
    这里我是已经改好了,之前是没有AI_xx的
    反正cpp的每一个都得加上AI_xx(即对应功能包的名字)
    如:
    #include “AI_xx/run.h”

    然后可以去编译了:
    在这里插入图片描述
    在这里插入图片描述
    编译成功
    运行咯~~~

    总结
    在src里加各个cpp
    在include/AI_XX(对应功能包的名字)里加对应的头文件
    修改cmake文件
    生成一个执行文件(加节点)
    修改cpp对应的#include路径

    就这几步。

    希望看到这里的读者能有所感悟,少走弯路~~

    因为我们还要用到工业相机的驱动文件,所以才有了前面一些说先不管的操作,下篇再讲。

    展开全文
  • 多个目录的多个cpp文件+编译opencv 目录结构为CMAKE_TEST为主文件夹, sub为子文件夹 ,编译主文件夹的main.cpp 包括寻找OPENCV库 主文件夹的cpp通过调用sub文件夹内cpp文件的类来声明对象且执行摄像头。 #CMAKE...
    • WORKING FOR THE WOLF

    • 多个目录的多个cpp文件+编译opencv

      • 目录结构为CMAKE_TEST为主文件夹, sub为子文件夹 ,编译主文件夹的main.cpp
      • 包括寻找OPENCV库
      • 主文件夹的cpp通过调用sub文件夹内cpp文件的类来声明对象且执行摄像头。
      #CMAKE最低版本要求
      cmake_minimum_required(VERSION 2.8)
      
      #项目信息--一般是总目录
      project(CMAKE_TEST)
      
      #查找当前目录下的所有源文件并保存到DIR_SRCS变量里面
      aux_source_directory(. DIR_SRCS)
      
      
      #添加子目录
      add_subdirectory(sub)
      
      #****************************************************
      #寻找opencv并且输出信息
      #预定义几个变量:
      #OpenCV_FOUND--是否找到OpenCV。
      #OpenCV_INCLUDE_DIRS--OpenCV的头文件目录。
      #OpenCV_LIBRARY_DIRS--OpenCV的库文件目录。
      #OpenCV_LIBRARIES--OpenCV的所有库文件列表。
      #*******
      #添加OPENCV路径
      find_package(OpenCV  REQUIRED)
      include_directories(${Opencv_IN_CLUDE_DIRS})
      link_directories(${OpenCV_LIBRARY_DIRS})
      
      #生成可执行文件main 然后./main运行
      add_executable(main ${DIR_SRCS})
      
      #添加链接库
      target_link_libraries(main sub ${OpenCV_LIBS})
      
      • 执行步骤
      • 当前目录cmake .
      • make
      • ./test
      • 即可

    单独编译opencv可以参考

    展开全文
  • OPENCV2.2源文件的结构

    2011-07-04 20:52:00
    Since version 2.2, the OpenCV library is divided into several modules. These modules are built in library fles located in the lib directory. They are:1 The opencv_core module that contains the core .....

    Since version 2.2, the OpenCV library is divided into several modules. These modules are built in library fles located in the lib directory. They are:
      1 The opencv_core module that contains the core functionalities of the library, in particular, the basic data structures and arithmetic functions.
      2 The opencv_imgproc module that contains the main image processing functions.
      3 The opencv_highgui module that contains the image and video reading and writing functions, along with other user interface functions.
      4 The opencv_features2d module that contains the feature point detectors and descriptors and the feature point matching framework.
      5 The opencv_calib3d module that contains the camera calibration, two-view geometry estimation, and stereo functions.
      6 The opencv_video module that contains the motion estimation, feature tracking, and foreground extraction functions and classes.
      7 The opencv_objdetect module containing the object detection functions such as the face and people detectors.
    The library also includes other utility modules containing machine learning functions (opencv_ml), computational geometry algorithms (opencv_flann), contributed code (opencv_contrib), obsolete code (opencv_legacy), and GPU accelerated code (opencv_gpu).
    All of these modules have a header fle associated with them (located in include directory).
    Typical OpenCV C++ code will therefore start by including the required modules. For example
    (and this is the suggested declaration style):
    #include <opencv2/core/core.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv2/highgui/highgui.hpp>
    If you see OpenCV code starting with:
     #include "cv.h"
    it is because it uses the old style, before the library was restructured into modules.

    翻译:

       opencv自从2.2版本起,将库分成很多模块,这些模块编译成库,放在opencv的lib文件夹下。他们分别是:

    1. opencv_core 模块 它包含库的核心函数,实际上它包含基本的数据结构和算术函数

    2. opencv_imgproc 模块 它包含主要的图像处理函数

    3. The opencv_highgui 模块,它包含图像和视频的读写函数以及用户交互函数

    4. opencv_features2d 模块,它包含特征点的检测、描述以及匹配的框架

    5. opencv_calib3d 模块,它包含摄像头的校准,双目几何估计和立体函数

    6. opencv_video 模块,它包含运动目标估计,特征跟踪和前景提取的函数和类

    7. opencv_objdetect 模块,它包含目标检测函数如人脸检测,和行人检测

    opencv库还包含其他单元模块如机器学习模块 (opencv_ml), 计算几何算法模块(opencv_flann), 已贡献代码模块(opencv_contrib), 过时的代码模块opencv_legacy以及图形加速模块(opencv_gpu).
    所有的模块都有一个与之关联的头文件(在include路径下)

    典型的OPENCV c++代码通常以包含这些必须的模块开始,如:

    #include <opencv2/core/core.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv2/highgui/highgui.hpp>

    转载于:https://www.cnblogs.com/seacode/archive/2011/07/04/2097735.html

    展开全文
  • 本系列文章由zhmxy555(毛星云)编写,转载请...毛星云(浅墨) 邮箱: happylifemxy@163.com  写作当前博文时配套使用OpenCV版本:2.4.8因为读研期间的研究方向是图像处理,所以浅墨这段时间闭门研究了很多OpenCV


    本系列文章由@浅墨_毛星云 出品,转载请注明出处。  

    文章链接: http://blog.csdn.net/poem_qianmo/article/details/19809337

    作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442

    邮箱: happylifemxy@163.com

    知乎:http://www.zhihu.com/people/mao-xing-yun

    写作当前博文时配套使用的OpenCV版本: 2.4.8、2.4.9、3.0


    2014年4月28更新OpenCV 2.4.9的配置。

    2014年9月12更新OpenCV 3.0的配置

    2014年9月12日本文第6次修订完毕)


    OpenCV2.4.9和2.4.8的配置几乎一样,唯一的区别在下文中的第五步,链接库的配置,把对应的248改成249即可。

    OpenCV 3.0配置更是被简化了。和2.4.8、2.4.9的区别就是下文第五步,链接库的配置,只用添加

    opencv_ts300d.lib、opencv_world300d.lib(debug版本的库)

    或opencv_ts300.lib、opencv_world300.lib(release版本的库)即可。


    ----------------------------浅墨于2014年9月12日注



    因为读研期间的研究方向是图像处理,所以浅墨这段时间闭门研究了很多OpenCV和图像处理相关的知识与内容。眼看自己积累到一定的程度了,于是决定开始开设这个OpenCV系列专栏,总结自己所学,也分享知识给大家。

    好了,这篇文章作为OpenCV的启程篇,自然少不了先系统地介绍OpenCV开发环境的配置。
    浅墨前后经历过OpenCV 2.4.6,OpenCV 2.4.7,OpenCV 2.4.8这三个版本的配置,有时候还要涉及到三个版本之间的转换,所以还是对OpenCV的配置有一定的理解的,希望自己的一点拙见能帮到大家。

    还是先放出待会儿的测试用图(如果要另存为这张图并配合文章后面给出的代码进行测试,注意后缀名要为jpg,而不是jpeg或其他):



    那么,开始吧。


    1.下载和安装OpenCV SDK



    VS2010不用说,肯定都安装了吧。来说说当前最新的OpenCV版本2.4.8(2014年2月24日),2.4.9 (2014年4月)的下载和安装。与其说是安装,不如叫解压更加合适,因为我们下载的exe安装文件就是一个自解压程序而已。

    在官网:http://opencv.org/上找到OpenCV windows版下载下来。

    下载完后得到文件OpenCV 2.4.X,双击后会提示解压到某个地方,推荐放到D:\Program Files\下,比如D:\Program Files,(因为OpenCV项目文件打包的时候,根目录就是opencv,所以我们不需要额外的新建一个名为opencv的文件夹,然后再解压,那是多此一举的事情)然后点击Extract按钮。

    等一段时间,OpenCV2.4.8近3个多G的文件就解压到了D:\Program Files下。


     其中,build里面是使用OpenCV相关的文件,我们如果只是使用OpenCV的话呢,就只用管build里面的内容。下面的sources文件夹你嫌烦,你嫌占硬盘空间,完全可以删掉。但是需要注意的是,官方示例集,也就是samples文件夹里面的示例程序,在sources文件夹里面躺着呢,所以,如果真是要删的话,还是想清楚哦。

    sources里面是源代码。可以直接查看。如何生成sln解决方案浅墨在这篇博文中有详细讲到:

     【OpenCV入门教程之七】 玩转OpenCV源代码:生成OpenCV工程解决方案与OpenCV源码编译



    2.配置环境变量


      

     

    这步的配置方法如下:

    【计算机】->【(右键)属性】->【高级系统设置】->【高级(标签)】->【环境变量】->“双击”系统变量中的PATH->在变量值里面添加相应的路径。如图:

    <1>


    <2>


    <3>


    <4>


    <5>



    对于32位系统,就添加:

    ”;…… opencv\build\x86\vc10\bin”(和之前的就有有的环境变量用英文的分号“;”进行分隔)

     

    而对于64位系统,可以两个都添加上:

    ”;…… opencv\build\x86\vc10\bin”

    和”…… opencv\build\x64\vc10\bin”,

    这样,到时候才可以在编译器Win32和X64中来回切换都吃得开,游刃有余~


    例如,浅墨的就是

    D:\Program Files\opencv\build\x64\vc10\bin;D:\Program Files\opencv\build\x86\vc10\bin


     PS:有童鞋亲测说64位系统也只需添加”…… opencv\build\x86\vc10\bin”即可,大家不妨一试。


    注:变量值实际为bin文件夹的路径;D表示OpenCV安装于D盘;X64表示运行系统环境位64位系统,若安装于32位系统,应为X86;vc10表示编译环境为Microsoft Visual Studio 2010;变量添加完成后最好注销系统,才会生效。

     


     



    3.工程包含(include)目录的配置



    之前看过的好多博文都说“每次新建工程都要重新配置”,其实不用这样麻烦的。

    首先是在Visual Studio里面新建一个控制台应用程序,最好是勾好空项目那个勾。

    (考虑到看这篇博文的童鞋很少接触vs,那么浅墨在这里将过程详细截图出来——浅墨2014年6月11日注)

    <1>打开visual studio,新建win32控制台项目,取个名字,比如叫test1,然后选好路径,点确定.


    <2>点一次“下一步”。


    <3>勾上空项目那个勾。


    <4>接着在解决方案资源管理器的【源文件】处右击->添加->新建项,准备在工程中新建一个cpp源文件。



    <5>选定C++源文件,取个名字,比如叫“main”,然后点【添加】,那么,一个新的cpp文件就添加到了工程中。

    <6>看过浅墨之前DirectX配置的相关博文的朋友们应该都知道,有一招叫属性管理器。在属性管理器中进行一次配置,就相当于进行了通用的配置过程,以后新建的工程就不用再额外的进行重新配置了。

    在菜单栏里面点<视图>--<属性管理器>,那么就会在visual studio中多出一个属性管理器工作区来。



    <7>在新出现的“属性管理器”工作区中,点击项目->Debug|Win32->Microsoft.Cpp.Win32.userDirectories(右键属性,或者双击)即可打开属性页面。

     



    <8>打开属性页面后,就是一番配置了。首先是在

    【通用属性】 ->【VC++目录】 ->【包含目录】中


    添加上

    D:\Program Files\opencv\build\include

    D:\Program Files\opencv\build\include\opencv

    D:\Program Files\opencv\build\include\opencv2 这三个目录。


    当然,这是之前把OpenCV解压到D:\Program Files\下的情况。实际的路径还要看你自己把OpenCV解压到了哪个目录下,根据你的实际情况来调节。







    4.工程库(lib)目录的配置



    其实这步和上一步差不多,属性管理器”工作区中,点击项目->Debug|Win32->Microsoft.Cpp.Win32.userDirectories(反键属性,或者双击)打开属性页面。

    接着上步,就是在【通用属性】 ->【VC++目录】 ->【库目录】中,


    添加上D:\Program Files\opencv\build\x86\vc10\lib这个路径。(最好不要复制粘贴浅墨给出的路径,而是自己去预览里面指定出来,这样会准确得多)


    (感谢小如风童鞋,之前给出的路径D:\Program Files\opencv\build\x86\vc10\lib里少个空格,直接复制浅墨给出的上面路径的童鞋就会出现“无法打开错误 1 error LNK1104: 无法打开文件“opencv_calib3d248.lib”类似的错误”,现已更正)

    ——————浅墨于2014年4月3日


    这里选择x86还是x64是一个常常令人困惑的问题。当然,对于32位操作系统,铁定就是选x86了。

    如果是64位操作系统,很多童鞋会想当然自作聪明地选择x64,其实不然。正确的理解是这样的:


    不管你是32位还是64位操作系统,只用管你用win32编译器还是X64编译器。

    其实配置选择什么跟64位还是32位系统没有直接的关系,而是在于你在编译你的程序的时候是使用那个编译器。


    编译器选的是win32,就用x86

    编译器选的是X64,就用X64。不过一般情况下,都是用的win32的X86编译器。所以,无论32还是64位操作系统,配置文件最好都选择x86版的


    另外,这里的vc10表示vs2010,如果是其他版本的visual studio,稍微要微调一下。

    感谢JJBomb 童鞋,这里我们补充完整:vc8 = Visual Studio 2005,vc9 = Visual Studio 2008,vc10 = Visual Studio 2010,vc11 = Visual Studio 2012,vc12 = Visual Studio 2013。

     




    5.链接库的配置


     

    依然是“属性管理器”工作区中,点击项目->Debug|Win32->Microsoft.Cpp.Win32.userDirectories(反键属性,或者双击)即可打开属性页面。【通用属性】 ->【链接器】->【输入】->【附加的依赖项】


    对于OpenCV2.4.8】,添加如下248版本的lib(这样的lib顺序是:19个带d的debug版的lib写在前面,19个不带d的release版的lib写在后面)


    opencv_ml248d.lib
    opencv_calib3d248d.lib
    opencv_contrib248d.lib
    opencv_core248d.lib
    opencv_features2d248d.lib
    opencv_flann248d.lib
    opencv_gpu248d.lib
    opencv_highgui248d.lib
    opencv_imgproc248d.lib
    opencv_legacy248d.lib
    opencv_objdetect248d.lib
    opencv_ts248d.lib
    opencv_video248d.lib
    opencv_nonfree248d.lib
    opencv_ocl248d.lib
    opencv_photo248d.lib
    opencv_stitching248d.lib
    opencv_superres248d.lib
    opencv_videostab248d.lib

    opencv_objdetect248.lib
    opencv_ts248.lib
    opencv_video248.lib
    opencv_nonfree248.lib
    opencv_ocl248.lib
    opencv_photo248.lib
    opencv_stitching248.lib
    opencv_superres248.lib
    opencv_videostab248.lib
    opencv_calib3d248.lib
    opencv_contrib248.lib
    opencv_core248.lib
    opencv_features2d248.lib
    opencv_flann248.lib
    opencv_gpu248.lib
    opencv_highgui248.lib
    opencv_imgproc248.lib
    opencv_legacy248.lib

    opencv_ml248.lib


    对于【OpenCV2.4.9】,添加如下249版本的lib(这样的lib顺序是:19个带d的debug版的lib写在前面,19个不带d的release版的lib写在后面)


    opencv_ml249d.lib
    opencv_calib3d249d.lib
    opencv_contrib249d.lib
    opencv_core249d.lib
    opencv_features2d249d.lib
    opencv_flann249d.lib
    opencv_gpu249d.lib
    opencv_highgui249d.lib
    opencv_imgproc249d.lib
    opencv_legacy249d.lib
    opencv_objdetect249d.lib
    opencv_ts249d.lib
    opencv_video249d.lib
    opencv_nonfree249d.lib
    opencv_ocl249d.lib
    opencv_photo249d.lib
    opencv_stitching249d.lib
    opencv_superres249d.lib
    opencv_videostab249d.lib

    opencv_objdetect249.lib
    opencv_ts249.lib
    opencv_video249.lib
    opencv_nonfree249.lib
    opencv_ocl249.lib
    opencv_photo249.lib
    opencv_stitching249.lib
    opencv_superres249.lib
    opencv_videostab249.lib
    opencv_calib3d249.lib
    opencv_contrib249.lib
    opencv_core249.lib
    opencv_features2d249.lib
    opencv_flann249.lib
    opencv_gpu249.lib
    opencv_highgui249.lib
    opencv_imgproc249.lib
    opencv_legacy249.lib
    opencv_ml249.lib


     


    需要注意的是,所粘贴内容即为之前我们解压的OpencV目录D:\opencv\build\x86\vc10\lib下所有lib库文件的名字;其中的248代表我们的OpenCV版本为2.4.8,若是其他版本的配置则在这里要进行相应的更改,比如说2.4.6版的OpenCV,那么这里的opencv_calib3d248d.lib就要改成opencv_calib3d246d.lib了.

    Debug文件库名有d结尾,Release没有,如 opencv_ts248d.lib(debug版本的lib)和opencv_ts248.lib(release版本的lib)

    不过我一般是在这里把带d和不带d的统统写在这里,因为这里是以后创建所有工程时都会继承的公共属性。


    对于【OpenCV 3.0】添加3.0版本的lib,新版的lib非常简单。想用debug版本的库,添加

    opencv_ts300d.lib

    opencv_world300d.lib 这两个库即可。

    而想用release版本的库,添加

    opencv_ts300.lib

    opencv_world300.lib即可。


    其实,对已经发行和 未来即将发布的新版OpenCV,只需看opencv\build\x86\vc10\lib下的库是哪几个,添加成依赖项就可以了。




    另外注意按照如上的这种方式来配置,也许会出现debug下可以运行但是release下不能运行的情况(因为字符串读取问题引起的诸如图片载入不了,报指针越界,内存错误等等),这算是OpenCV自2.4.1以来的一个bug。

    解决方案:想在release模式下运行出程序结果,在工程的release模式下,将不带d的lib(全部是19个)添加到【项目】->【属性】(注意这样打开的是当前工程的属性页,我们只需在这里将release版(即不带d)的相关lib添加进去)->【配置属性】->【链接器】->【输入】->【附加的依赖项】下即可。


    ——————浅墨 2014年3月17日注&2014年6月11日更新

    类似错误如图:


     

     



    6.在Windows文件夹下加入OpenCV动态链接库



    PS:经过 hellofuturecyj 同学提醒,如果配置环境变量那步配置准确,且配置之后经过重启,就没有进行这步配置的必要了。即做完上面第五步的配置,重启一次,就可以直接跳到第七步,进行测试,看出不出图。

    当然,如果需不重启而马上来看配置的结果,就可以试试这里的方式。

    ——————浅墨 2014年6月16日注


    这一步是各种介绍OpenCV的配置的相关博文中都没写出来的。根据这些博文配置出来的环境,在运行基于OpenCV的程序的时候,往往会得到这样类似的结果:

     

    这种问题最简单粗暴的方法,是把相关的dll都拷贝到Windows操作系统的目录下。如果你的Windows安装在C盘,那么路径就是c:\Windows\System32。按照之前我的OpenCV的存放环境,这些dll存放在

    D:\Program Files\opencv\build\x86\vc10\bin目录下。


    到这个目录下,【Alt+A】全选,【Alt+C】拷贝,然后转到c:\Windows\System32下面,【Alt+V】复制,简单粗暴地就完成了。

    PS:对于Windows 8,则要放在要在SysWOW64文件夹中。

     

     

    恩,环境配置大功告成,我们来测试一下成果吧~





    7.最终的测试


     

    就用载入并显示一张图片到窗口的程序,用于我们的配置测试吧。

    新建一个空项目的控制台应用程序,新建一个cpp文件,然后粘贴如下代码:

    #include<iostream>
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    
    
    using namespace cv;
    
    
    int main()
    {
    	// 读入一张图片(游戏原画)
    	Mat img=imread("pic.jpg");
    	// 创建一个名为 "游戏原画"窗口
    	namedWindow("游戏原画");
    	// 在窗口中显示游戏原画
    	imshow("游戏原画",img);
    	// 等待6000 ms后窗口自动关闭
    	waitKey(6000);
    }


    放置一张名为pic.jpg的图片到工程目录中,然后点击“运行“按钮,如果配置成功,就不会报错,得到预想的运行结果:



    为了大家的考虑,还是把工程文件发一下吧,虽然这次只有简单的几句代码:


    OpenCV+VS2010开发环境配置 测试用例 by浅墨】下载

     



    7.可能遇到的问题和解决方案


     

    呼,生活不可能是一帆风顺的,我们的配置过程也是。浅墨在几次的配置过程中,出现了如下的几种典型问题,我相信你可能会出现,就在这里集中列举一下吧,希望能为大家解惑:


    1. 找不到core.h

    出现这个问题是因为include的时候粗心大意了。

    如果你的版本是2.4.6。在这个版本下,opencv根文件夹下面就有个include,但我们配置的时候如果包含的是他就坑爹了。

    正确的应该填build里面的那个include。

     

    2.无法解析的外部命令

    这个问题其实上面有过解释了,不管你是32位还是64位操作系统,只用管你用win32编译器还是X64 编译器。

    其实配置选择什么跟64位还是32位系统没有直接的关系,而是在于你在编译你的程序的时候是使用那个编译器。

    编译器是win32,就用x86

    编译器是X64,就用X64。不过一般情况下,都是用的win32的X86编译器。所以,

    无论32还是 64位操作系统,配置文件最好都选择x86版的。

     

    3.关于形如--error LNK2005:xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义

    出现这个问题,把静态库不包含就行了。

     

    4. 应用程序无法正常启动0xc000007b

    Lib包含的问题。也许你同时包含了X86和X64的,或者包含出错错了。或者是对于windows 8 64位,dll要放在和System32文件夹同级的SysWOW64文件夹中。


    5.明明图片路径是对的,却载入不进去图片,提示指针越界,有未经处理的异常

    类似错误如图:



    这算是opencv的一个bug,工程属性里面关于带d和不带d的lib文件的附加依赖项的问题,就算配置好了每次想debug和release下都运行还得手动在工程属性里面加。当得到这样的错误时,可以把调试方式改一改,debug和release互换:


    或者打开当前工程(注意是当前工程的属性页,不是通用属性页)的属性页,debug或者release哪个报错,就把对应的带d或不带d的lib添加到【“当前”工程属性】->【链接器】->【输入】->【附加的依赖项】下即可。


    关于问题五的另一种错法:图片后缀问题

    昨天晚上一个学弟和大家一样在参考这篇文章配置OpenCV环境,弄了一下午一直报这个错误。最后浅墨给他看了下,发现是图片后缀的问题,在这里更新一下,以免有童鞋是因为这个问题而一直得不出结果。确保你载入的图片是和代码中imread的路径、名称、后缀是一模一样的。例如,学弟遇到的问题就是,在xp系统下面,没有显示后缀名,下了浅墨在文章末尾给出的配置参考示例程序,估计是xp系统默认会把jpg当做jpeg对待,然后他在代码中imread的是“1.jpg”,硬是报错。我给他看的时候,在文件夹选项中调出文件后缀名,发现在win7下面给大家准备的名为“1.jpg”的文件,在xp下面变成了“1.jpeg”。然后浅墨将学弟代码中的“1.jpg”改成“1.jpeg”,立马出结果。或许这就是一部分朋友们调不出结果的另一种原因吧。

    -----------------------浅墨于2014年9月20日补充




    6.无法打开文件“opencv_ml249d.lib”系列的错误


    关于LINK : fatal error LNK1104: 无法打开文件“opencv_ml249d.lib”,在评论区和大家给浅墨发的邮件中是普遍的一个错误。


    PS: jzh258fits 同学提出的一个新的解决方法是:项目->属性管理器->Debug|Win32->Microsoft.Cpp.Win32.userDirectories中的属性页面->连接器->常规里面的附加库目录中加入相应的lib文件目录。

    这个错误主要是因为包含的库目录中,和包含的附加依赖项不能相互对应照成的。

    也许是“opencv_ml249d.lib“多加了一个空格,成了”opencv_ml249d. lib“,就会报错。
    遇到这个问题,检查三个方面:

    1.检查第四步 ”4.工程库(lib)目录的配置“ 库目录中的路径是否准确。
    2.检查第五步”5.链接库的配置“中附加依赖项”的格式有没有问题,有没有多空格,版本号248,249什么的有没有问题,有没有多一个空格,少一个点什么的。
    3.第二步环境变量的配置是否准确。


    ——————————浅墨2014年4月28日更新




    好了,OpenCV的配置大概就是这些。

    下篇文章见 :)

     

     

    展开全文
  • C++版本使用CMakeLists.txt编译(不同目录多个源文件)可执行文件-C++版本使用CMakeLists.txt编译(不同目录多个源文件)可执行文件-C++版本使用CMakeLists.txt编译(不同目录多个源文件)可执行文件
  • 在图3界面下,第一步:在数字1区域,选择你opencv3.4.2的源文件所在目录,即CMakeLists文件所在目录; 第二步:在数字2区域,选择你所希望安放编译文件的所在目录,当然,要创建一文件夹,命名build还是mybuild...
  • Windows下源文件编译安装OpenCV2.3

    千次阅读 2011-11-21 16:41:02
    Windows下源文件编译安装OpenCV2.3: 1.下载安装CMake,下载地址:http://www.cmake.org/cmake/resources/software.html 2.下载安装TortoiseSVN,下载地址:http://tortoisesvn.net/downloads.html 3.建立一...
  • OpenCV

    2021-03-18 23:12:02
    OpenCV 失踪人口回归一波~~ 今天想更这主要是看实习的时候...编译OpenCV源文件 这是体力活。。。我也忘了怎么搞来着,百度还是有很好教程的哈。 这里就提一下要用到的一些软件吧: Git CMake Visual Studio 首先
  • opencv

    千次阅读 多人点赞 2020-12-02 22:50:56
    基于opencv和树莓派的人脸追踪一、 项目准备1.1、opencv在树莓派上的编译安装wiringPi的简单介绍和安装SMB服务器的简单配置如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一适合你的列表创建一...
  • opencv Stitcher图拼接

    千次阅读 2019-07-09 12:19:01
    Opencv使用Stitcher类图像拼接生成全景图像 更新时间:2018年01月22日 14:53:14 作者:-牧野- 我要评论 这篇文章主要为大家详细...Opencv中自带的Stitcher类可以实现全景图像,效果不错。下边的例子是Opencv Sa...
  • 今天LZ在使用OpenCV的时候发现一很尴尬的问题,相信很小伙伴都遇到过类似的问题,就以今天LZ碰到的问题为例吧。 今天利用OpenCV3.2对图像进行提取轮廓信息后,对轮廓进行拟合圆锥曲线,但是效果不是很好,所以...
  • 安装步骤 1.下载源文件OpenCV的官方网站下载OpenCV的3.4.12...(其中contrib包是OpenCV中一些比较新的或者不那么稳定的算法模块,而OpenCV的主体是比较稳定的算法模块) 2.解压 将OpenCV解压到喜欢的位置,例如 ...
  • opencv中BackgroundSubtractorMOG2源码分析与原理讲解

    万次阅读 多人点赞 2017-11-16 21:22:05
    混合高斯分布(GMM)是背景建模的经典算法,自提出至今已经有了很围绕它改进和应用的论文。opencv中(2.4.13版本)也引入了该算法及其改进版本。 首先是基本版本的GMM,opencv将其封装为...
  • ////////////////////////////****应用opencv编程的参考实例(自写+参考)****/////////////////////////////////////*-----------------------------------------------------------------------------------------...
  • 这里就需要编译OpenCV,而编译后查看编译的库文件缺少一个opencv_viz2413d.lib文件(没错,这里可以看出我使用的OpenCVopencv-2.4.13.6版本)。所以需要额外重新编译这库。首先就会遇到一问题:默认的OpenCV...
  • OpenCV中的数据结构

    2015-12-14 22:10:10
    在之前的程序,我们已经使用过IplImage这数据类型,IplImage是OpenCV1.0图像的基本数据结构,也是OpenCV1.0最常用的数据类型。下图为我们展示了三种数据结构之间的继承或派生关系:   虽然,OpenCV1.0是用...
  • 这篇文章,我们一起探讨了如何通过已经安装的OpenCV,选择不同的编译器类型,生成高度还原的OpenCV开发时的解决方案工程文件,欣赏OpenCV新版本总计 六十六万行的精妙源代码。我们可以对其源代码进行再次编译...
  • Canny边缘检测介绍Canny边缘检测算子是一种多级检测算法。1986年由John F. Canny提出,同时提出了边缘检测的三大准则:低错误率的边缘检测:检测算法应该精确地找到图像...
  • 基础预览:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一应用程序框架,以减少应用程序开发人员的工作...
  • opencv 的cvMat详解

    万次阅读 2014-03-25 20:34:18
    图像在计算机是以数组的形式存放的,Mat是OpenCV中用于存放图像的数据结构。通过调用相关方法,我们能够实现对图像的输入输出以及一些操作。同时,Mat又不止可以作为图像容器,它也可以作为一种比较纯粹的描述矩阵...
  • 笔者的系统是ubuntu14,之前安装的是opencv3.1.0,但是后来在装ROS的时候,ros-indigo-destop-full顺便安装了版本2.4.8的opencv,因为ROS里面的一些文件需要依赖于该版本的opencv,例如cv_bridge和image_pipeline。...
  • 最近刚开始使用VScode,要在VScode使用opencv,在配置过程出现的问题记录 1.MinGW编译器下载 ...window电脑这里需要下载x86_64-posix-seh版本,下载x86_64-...这里出现的问题是我参考了多个教程所导致的,在cmake ope
  • OpenCV - Linux安装使用OpenCV

    千次阅读 2013-11-08 14:55:52
    这里原来是想安装OpenCV...不选择其他更高的版本,只是因为在一项目使用了其他高版本OpenCV中已经废除的类型CvvImage,虽然在高版本有替换此类型的方法,但是本人需要做的只是将此项目工程从Windows移植到Li
  • Opencv 函数

    2019-03-16 17:32:43
    1、OpenCV模块划分 OpenCV其实就是一堆用C和C++语言来实现计算机视觉算法...同时由于源文件居多,所以根据算法的功能将源文件分到多个模块(如下),将每个模块源文件编译成一个库文件(如opencv_core.lib、o...
  • 首先要明确在没有安装OpenCV的电脑上,要运行基于OpenCV库的程序,有两种方法: 一、将OpenCv安装目录下的bin目录下的*.dll文件 与应用程序一起打包发布。 二、将OpenCV库源代码加载到工程中和应用程序一起编译,...
  • OpenCV中的CvvImage.h和CvvImage.cpp文件,利用CvvImage类型在MFC显示图像(IplImage*或者Mat)的时候,由于OpenCV2.0及以上版本去除了这个类型,所以很不方便。...这两个源文件没问题的,请放心使用。
  • 需要解决的问题: 1. 怎么用opencv 输出中文字符? 2. 怎么控制输出字符的大小? 环境: vs2010 + opencv2.4.9 ...因此,想要修改字体大小,就得自己写一接口,调用 FT_Set_Pixel_Sizes() 函数去修改字体大小。
  • VSCode作为微软推出的一款免费...在这里介绍关于多个C/C++源文件在VSCode编译运行的方式方法,这里会用到makefile以及Opencv 注意:这里默认你已经在Linux系统上配置好了Opencv环境,只有这样你才能成功运行实例程序。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,337
精华内容 2,134
关键字:

opencv中多个源文件