opencv 订阅
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1]  它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。 [2] 展开全文
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1]  它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。 [2]
信息
开发商
OpenCV
软件授权
Intel、Willow Garage、NVIDIA等 [3]
软件名称
OpenCV
更新时间
2020-04-06
软件版本
OpenCV–4.3.0 [2]
软件平台
Linux、Windows、Android、Mac OS等
软件语言
C++
软件大小
1.16GB
opencv历史发展
OpenCV 拥有包括 500 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。OpenCV 为Intel® Integrated Performance Primitives(IPP)提供了透明接口。这意味着如果有为特定处理器优化的 IPP 库,OpenCV 将在运行时自动加载这些库。 [4]  (注:OpenCV 2.0版的代码已显著优化,无需IPP来提升性能,故2.0版不再提供IPP接口) [5]  最新版本是3.4 ,2017年12月23日发布 [6]  。1999年1月,CVL项目启动。主要目标是人机界面,能被UI调用的实时计算机视觉库,为Intel处理器做了特定优化。2000年6月,第一个开源版本OpenCV alpha 3发布。2000年12月,针对linux平台的OpenCV beta 1发布。2006年,支持Mac OS的OpenCV 1.0发布。2009年9月,OpenCV 1.2(beta2.0)发布。2009年10月1日,Version 2.0发布。2010年12月6日,OpenCV 2.2发布。2011年8月,OpenCV 2.3发布。2012年4月2日,发布OpenCV 2.4。2014年8月21日,发布OpenCv 3.0 alpha。2014年11月11日,发布OpenCV 3.0 beta。2015年6月4日,发布OpenCV 3.0。2016年12月,发布OpenCV 3.2版(合并969个修补程序,关闭478个问题)2017年8月3日,发布OpenCV 3.3版(最重要的更新是把DNN模块从contrib里面提到主仓库)OpenCV 使用类BSDlicense,所以对非商业应用和商业应用都是免费(FREE)的。(细节参考 license)OpenCV提供的视觉处理算法非常丰富,并且它部分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常的运行在DSP系统和ARM嵌入式系统中,这种移植在大学中经常作为相关专业本科生毕业设计或者研究生课题的选题。
收起全文
精华内容
下载资源
问答
  • 2022-02-23 11:01:38

    参考:
    多个opencv版本配置:https://immortalqx.github.io/2021/07/06/opencv-notes-0/
    多个opencv版本配置与调用:https://blog.csdn.net/BeeGreen/article/details/104397348
    查阅显卡计算能力对应表:https://blog.csdn.net/qq_42683011/article/details/113825841

    配置OpenCV

    Ubuntu18.04配置OpenCV及多版本OpenCV共存。
    以配置opencv4.2.0和opencv4.5.5为例,其他版本也适用。

    一、安装OpenCV的依赖包

    一步一步安装下面所有的依赖包,如果下面的安装报错,根据报错的具体信息上网查找相关资料即可解决。

    sudo apt-get install build-essential
    sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 
    sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
    

    二、下载需要的OpenCV版本和文件放置

    所有OpenCV的发布版本都可以在下面这个网址找到,根据自己的需要下载即可。
    https://github.com/opencv/opencv/releases
    我们需要安装的是 opencv-4.2.0 以及它的扩展模块 opencv_contrib-4.2.0,因此我们可以在下面的网址中下载,这里我下载的都是zip包:
    opencv-4.2.0
    opencv_contrib-4.2.0

    先创建一个OpenCV的总文件夹,用来存放不同版本的opencv源码。这里在里面先创建一个OpenCV-4.2.0文件夹用来存放4.2.0版本的源代码,然后在里面进行编译。
    比如我这里在home目录下创建一个OpenCV文件夹:

    mkdir OpenCV
    cd OpenCV
    mkdir OpenCV-4.2.0
    

    然后将刚刚下载的那两个opencv的文件解压缩后,放到创建的OpenCV-4.2.0文件夹中。
    在这里插入图片描述

    三、使用cmake构建库

    先进入解压后的 opencv-4.2.0 文件夹,并且创建一个build文件,之后再进入build文件夹下进行 cmake:

    cd opencv-4.2.0
    mkdir build
    cd build
    

    在这里插入图片描述
    开始 cmake,cmake是为了链接后面make要用到的相关库及其定义编译什么版本的opencv,比如cpu版本或者gpu(cuda)版本,比如opencv中的dnn网络就需要用到gpu版本的opencv。正常情况下我们编译cpu版本的即可,而且gpu版本的编译可能会碰到许多cuda链接的错误。需要根据你的实际情况,对下面的指令参数进行修改:

    • 选择编译cpu版本的opencv(推荐):
    cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_4.2.0 -D OPENCV_EXTRA_MODULES_PATH=/home/wsy/OpenCV/OpenCV-4.2.0/opencv_contrib-4.2.0/modules -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=True ..
    
    • 或者 选择编译gpu版本的opencv:
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_4.2.0 CUDA_ARCH_BIN='7.5' -D WITH_CUDA=ON -D WITH_QT=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=/home/wsy/OpenCV/OpenCV-4.2.0/opencv_contrib-4.2.0/modules -D INSTALL_C_EXAMPLES=ON -D BUILD_EXAMPLES=ON ..
    

    注意事项:

    1. OpenCV 4.2.0支持使用CUDA对DNN模块进行加速计算,所以这里配置CUDA;在此之前需要自行配置好NVIDIA显卡的驱动与CUDA。
    2. 其中CUDA_ARCH_BIN=‘7.5’ 指的是显卡的计算能力。可以参考:NVIDA CUDA显卡计算能力对应表:https://blog.csdn.net/qq_42683011/article/details/113825841
    3. CMAKE_INSTALL_PREFIX 是opencv的安装地址 默认安装在 /usr/local/opencv_4.2.0
    4. CMAKE_BUILD_TYPE 是opencv安装的版本,Release和Debug两种可选,默认安装Release
    5. OPENCV_ENABLE_NONFREE 是否使用部分被申请了专利的算方法 这里选True的话就可以使用了
    6. OPENCV_GENERATE_PKGCONFIG 强烈建议开启这个 设置为ON, 因为opencv4默认不生成.pc文件,所以加上这句用于生成opencv4.pc文件,支持pkg-config功能。opencv4版本及以上 这里用ON

    上面这种格式的指令在笔者的电脑上构建opencv-4.2.0、opencv-3.4.6都没有发现问题,应该对于opencv3和opencv4都能够构建成功。

    但是在构建opencv2,比如opencv-2.4.9时,建议参考下面的指令进行构建:

    cmake -D CMAKE_BUILD_TYPE=RELEASE \
          -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_2.4.9 \
          -D WITH_CUDA=OFF \
          -D WITH_OPENGL=OFF \
          -D WITH_OPENCL=OFF \
          -D BUILD_JPEG=OFF \
          -D BUILD_PNG=OFF \
          -D BUILD_JASPER=OFF \
          -DBUILD_OPENEXR=OFF \
          -D BUILD_TIFF=OFF \
          -D BUILD_ZLIB=OFF \
          -D WITH_FFMPEG=OFF \
          -D CMAKE_CXX_FLAGS="-std=c++11" \
          -D CMAKE_CXX_COMPILER=/usr/bin/g++-4.8 \
          -D CMAKE_C_COMPILER=/usr/bin/gcc-4.8 \
           ..
    

    四、使用make编译库

    建议在make之前先查看CPU的核心数:

    nproc
    

    你可以根据你的核心数来调整make指令的参数,比如我的CPU核心数为16,则可以执行:(建议不用堆满)
    (此处也是在那个build文件夹下进行的)

    make -j15
    

    在编译结束之后,执行:
    (此处也是在那个build文件夹下进行的)

    sudo make install
    

    五、添加到系统环境变量

    修改~/.bashrc或者~/.zshrc(用哪个终端就改哪个):

    sudo gedit ~/.bashrc
    

    加入如下的内容:

    #OpenCV_4.2.0
    export PKG_CONFIG_PATH=/usr/local/opencv_4.2.0/lib/pkgconfig
    export LD_LIBRARY_PATH=/usr/local/opencv_4.2.0/lib
    

    加入上述内容后进行 source.

    source ~/.bashrc
    

    六、验证配置结果

    任意目录创建一个test.cpp文件,写入如下内容:

    #include “opencv2/opencv.hpp”
     
    using namespace cv;
    using namespace std;
     
    int main( int argc, char** argv )
    {
      cout << "OpenCV version : " << CV_VERSION << endl;
      cout << "Major version : " << CV_MAJOR_VERSION << endl;
      cout << "Minor version : " << CV_MINOR_VERSION << endl;
      cout << "Subminor version : " << CV_SUBMINOR_VERSION << endl;
    }
    

    使用命令行在其文件夹下执行

    # 编译test.cpp程序,并生成可执行文件
    g++ -std=c++11 test.cpp `pkg-config --libs --cflags opencv4` -o result
    
    # 执行可执行文件
    ./result
    

    如果输出以下内容,即表明配置成功

    OpenCV version : 4.2.0
    Major version : 4
    Minor version : 2
    Subminor version : 0
    

    到这里我们已经成功配置好了一个 opencv4.2.0,已经可以使用了。

    七、多个OpenCV版本共存

    在开发不同工程时可能会需要不同版本的OpenCV,因此在电脑上安装多个版本的OpenCV很有必要。成功的关键是安装到不同的路径,并在CMakeLists.txt中找到需要的版本。

    CMakeLists.txt中可设置手动寻找OpenCV的指定路径,如下:

    set(OpenCV_DIR /usr/local/opencv_4.2.0/lib/cmake/opencv4)
    find_package(OpenCV 4 REQUIRED)
    

    其中,设置在 set(OpenCV_DIR /usr/local/opencv_4.2.0/lib/cmake/opencv4) 的目的主要是:设置opencv路径的时候,找有OpenCVConfig.cmake文件的文件夹,在我的安装目录下,OpenCVConfig.cmake文件在上述的路径中找到了,因此添加这个路径。

    如果不进行手动寻找OpenCV的指定路径的话,而只是自动寻找系统路径下配置的OpenCV的话,只需如下指令:
    第一个表示自动寻找系统库里版本4以上的,第二个表示找系统库里的最低版本。

    find_package(OpenCV 4 REQUIRED)
    或者
    find_package(OpenCV REQUIRED)
    

    假设我们已经安装好一版OpenCV,一般都安装在/usr/local下。如果需要安装另一个版本的OpenCV,就不能再安装到/usr/local,而是选择其他路径,否则会覆盖掉之前的版本。

    七-1 安装OpenCV到不同的路径

    在上面的安装教程中,我们介绍的其实就是将各个版本的OpenCV安装到不同的路径,你可以继续根据上面的教程来安装其他的OpenCV版本。
    在这里插入图片描述
    在这里插入图片描述

    七-2 添加到系统环境变量

    修改~/.bashrc或者~/.zshrc(用哪个终端就改哪个):

    sudo gedit ~/.bashrc
    

    像下面这样加入新的内容:

    #OpenCV_4.2.0
    #export PKG_CONFIG_PATH=/usr/local/opencv_4.2.0/lib/pkgconfig
    #export LD_LIBRARY_PATH=/usr/local/opencv_4.2.0/lib
    
    #OpenCV_4.5.5
    #export PKG_CONFIG_PATH=/usr/local/opencv_3.4.6/lib/pkgconfig
    #export LD_LIBRARY_PATH=/usr/local/opencv_3.4.6/lib
    
    #OpenCV_2.4.9
    #export PKG_CONFIG_PATH=/usr/local/opencv_2.4.9/lib/pkgconfig
    #export LD_LIBRARY_PATH=/usr/local/opencv_2.4.9/lib
    

    新加入OpenCV版本或者暂时不适用的OpenCV版本的建议注释掉。

    七-3 切换OpenCV的版本

    在上面我们把新版本OpenCV添加到系统环境变量时,都加上了注释,因此你可以通过去掉注释来切换OpenCV的版本,比如我们需要使用OpenCV_2.4.9,就可以把上面的内容修改为:

    #OpenCV_4.2.0
    #export PKG_CONFIG_PATH=/usr/local/opencv_4.2.0/lib/pkgconfig
    #export LD_LIBRARY_PATH=/usr/local/opencv_4.2.0/lib
    
    #OpenCV_3.4.6
    #export PKG_CONFIG_PATH=/usr/local/opencv_4.5.5/lib/pkgconfig
    #export LD_LIBRARY_PATH=/usr/local/opencv_4.5.5/lib
    
    #OpenCV_2.4.9
    export PKG_CONFIG_PATH=/usr/local/opencv_2.4.9/lib/pkgconfig
    export LD_LIBRARY_PATH=/usr/local/opencv_2.4.9/lib
    

    七-4 测试切换的效果

    每次切换后,都需要更新~/.bashrc 或者 ~/.zshrc

    source ~/.bashrc 
    

    查询OpenCV版本(也可以使用上面安装OpenCV时的测试代码)。
    注意: 但是我这里用这个命令只能查询到之前系统就自带的opencv3.2.0,无法查询到opencv4.2.0,所以猜想可能是一些动态链接没设置好,但是上面配置的内容不影响代码里调用和使用opencv4.2.0

    pkg-config --modversion opencv
    

    在这里插入图片描述

    更多相关内容
  • opencv-4.2.0-windows版本

    2020-01-11 15:19:21
    因为opencv官网的下载速度太慢,所以特地整理了几个常用的版本,提供给国内伙伴们下载。此处为opencv-4.2.0的windows版本,其他的版本请参见我的博客【https://blog.csdn.net/LEON1741/article/details/90211061】
  • OpenCvSharp4.1官方例程

    2019-08-08 16:13:54
    C#下用的OpenCV版本,对应opencv4.1版本,这是官方例程
  • OpenCvSharp打开摄像头,VideoCapture,OpenCv,Mat,相机,Camera。内有编译好的程序,可以直接运行
  • 基于OpenCv的旋转匹配

    2018-09-10 00:31:14
    基于OpenCv实现了模板图像的旋转匹配,此代码基于matchTemplate函数封装实现可以得知旋转角度的模板匹配
  • opencv实时识别指定物体

    热门讨论 2018-02-03 16:46:41
    opencv实时识别指定物体,所有需要的用到的文件都已经放上了,opencv 3.4.0 python 3.6.3
  • opencv-3.0.0.zip

    千次下载 热门讨论 2017-01-07 21:59:16
    OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。
  • opencv-2.4.9.官方绿色版zip

    千次下载 热门讨论 2017-01-07 22:07:44
    OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。
  • 三本基础的Opencv2外文书书籍

    热门讨论 2014-05-11 17:06:52
    本资源包括三本opencv2.x的入门书籍,前两本附有代码。 1.《OpenCV 2 Computer Vision Application Programming Cookbook - Lagani》,这本书是第一本关于介绍opencv2.x的非官方书籍,外国人写的书,通俗易懂,而且...
  • windows安装配置opencv opencv_contrib

    千次阅读 2022-03-09 16:09:09
    目录 前言 python用户 c++用户 一,下载cmake,opencvopencv_contrib,Visual Studio ... 用不上opencv_contrib里面算法的,建议暂时先不用配置opencv_contrib,这个直接用和opencv和用opencv加上c...

    目录

    前言

    python用户

    c++用户

    一,下载cmake,opencv,opencv_contrib,Visual Studio

    1,下载安装cmake

    2,下载opencv,opencv_contrib

    3,下载Visual Studio        

    二,编译opencv和opencv_contrib

    1,cmake编译

    2,VS编译生成,并配置opencv_contrib环境

    三,总结


    前言

            用不上opencv_contrib里面算法的,建议暂时先不用配置opencv_contrib,这个直接用opencv和用opencv加上contrib的环境配置难度差异较大(python用户当我没说)。

    python用户

    cmd终端输入:

    pip install opencv-python
    
    pip install opencv-contrib-python

    c++用户

    一,下载cmake,opencv,opencv_contrib,Visual Studio

    1,下载安装cmake

            ①官网下载:Download | CMake

            ·        

            根据自己的电脑选择合适的版本下载,一般都为64位。下载好后直接安装,点next的画面我就不展示了,我展示需要更改的。

            ②如图

            

             ③更改储存位置

            

             ④终端输入cmake验证

            

    2,下载opencv,opencv_contrib

          ① opencv官方下载https://github.com/opencv/opencv/releases

           

             根据自己的需求下载对应的版本,windows下载exe版本就行,省却解压步骤,注意解压的路径,建议选择一个盘新建一个opencv文件夹,用来放opencv和opencv_contrib。

           ② opencv_contrib官方下载:  https://github.com/opencv/opencv_contrib/tags

            注意和自己下载的opencv版本对应,这个只有源码方式,不过原理都一样,

            

    3,下载Visual Studio        

         ① 官方链接:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux

            个人学习建议直接下社区版,也不用去费劲破解啥的了,对于个人开发来说,没有区别。

            

             ②下载完成,点击安装之后等待一会就行,根据自己需要进行选择,选少了也没事,后面还可以再添加,但是选多了,就实实在在占内存了。

            

            ③选择完后,点击语言包选择语言

            

             ④选择安装位置,刚买的笔记本,就一个盘,所以只能放c盘。有需要更改位置的可以选择更换位置。

            

             ⑤点击安装(我是装好了,回来截的图,正常的会显示安装),然后耐心等待,包很大

            

            ⑥想要更改配置的,可以在左下角开始出找Visual Studio Installer,点击进行修改

                             

    二,编译opencv和opencv_contrib

    1,cmake编译

            ①在安装或源码存放目录下,新建build文件夹

            

            ②打开cmake文件夹,选择opencv文件夹中的source文件夹和build文件夹

             ③点击configure选择配置,然后弹出配置框,第一项选择自己的Visual Studio版本,后面两项不用填

                                     

             ④再次点击configure,它会运行source文件中cmakelist进行下载配置(第一个框,第一次运行时会显示变成红色,再点一次configure就没了),不过这一步,应该没有人能一次性下载完的,都会报错下载不了,原因应该是被墙了,但是科学上网有时候有用(有条件可以多试试)。如果科学上网还是不行,就得老老实实的手动下载(建议耐心一点,有点麻烦),复制报错的CMakeDownloadLog.txt路径。

                            

            ⑤打开CMakeDownloadLog.txt,查看报错

                     

             ⑥打开对应的文件夹,可以看到下载的文件为0kb,所以需要手动下载

             ⑦报错文件夹中所下载的网址被墙得很死,所以去github下载比较好。

            下载地址:https://raw.githubusercontent.com/opencv/opencv_3rdparty/

    根据报错的信息选择对应的文件 以上文报错为例       

                    

             ⑥改名,将下载文件改为所缺文件夹中的名字

            

                  此处为了对比才放一起,实际操作最好先改名再移到所需文件夹中

            

              ⑦再运行Corfigure,会发现红色警告少了一个,然后④~⑦继续解决,直到没有红色警告。熟悉之后可一次性下载多个,然后替换,注意一下对应关系别混就行,有的报错文件没有版本要求就直接下载最新的一版,不用太纠结。

                    

                     

             ⑧编译opencv_contrib,做下面三项改动,勾选BUILD_opencv_world、OPENCV ENABLE NONFREEM和添加opencv_contrib中的moudle路径 。如果需要cuda加速和cudann使用的接着勾选。不需要则直接进行⑨步

                    

                    

             ⑧-1,cuda加速的前提是要安装好cuda和对应的cudann版本,并且具有英伟达显卡。不满足条件,勾选会报错。搜索cuda,全部选中,然后点击configure再进行配置

                    

           ⑧-1-1,首先检查是否找到cuda和cudann,如果没找到则检查版本对应以及环境配置,可参考cuda环境配置,进行重新配置。注意重新配置好后,要删除build文件夹重新编译,否则还是检测不到,不过由于不能下载的文件已经备齐所以不会费多少时间。成功结果如图:

                      

            ⑧-1-2,然后查看爆红,还是查看CMakeDownloadLog.txt,去github下载对应文件防止对应文件夹。解决完下载报错之后,下面这个报错可以忽略。

                    

             ⑧-2查询显卡算力,在cmd终端运行(安装cuda路径)C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\extras\demo_suite路径下的deviceQuery.exe。我查询结果为8.6

                    

             ⑧-3,将CUDA _ARCH_BIN中比自己小的算力都删掉(但不知道为啥现在RTX3090都出来好久了,cuda加速的算力好像还在3060范围,我的笔记本3060显卡算力竟然在最高段),借用一下大佬的图,这一栏我为空,然后自己加的。

                    

             ⑨点击configure编译,不出意外的话,还是会有很多红色警告,解决警告的方法还是同④~⑦一样操作。不过我出意外了,科学上网下载github文件,然后没有关。两次configure,连续编译就结束了,没有红色警告,巴适。

             ⑩解决完红色警后,点击Generate,然后点击Open Project。

    2,VS编译生成,并配置opencv_contrib环境

           ① 按照图片操作,点击生成解决方案,在将opencv和opencv_contrib的库结合在一起。生成后,可能会失败一个,影响不大。

            

            ②新打开一个VS界面。新建项目,然后添加库到项目编译的环境中。添加include头文件,添加成功后如果有测试代码会发现,关于opencv_contrib和opencv的头文件不再报错

            ​​​​​​​        

            ③添加lib 文件,其实很多教程都使用链接器巴拉巴拉的(如果出现main.obj文件报错,则要按照③-1添加),我试了很多次,在库目录添加lib文件夹就行。                       ​​​​​​​                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​      

            ③-1,后续博主测试的时候发现,有的代码,添加了lib文件夹,但是运行的时候还是链接不到opencv的lib文件,中间文件.obj会报错:error LNK2019: unresolved external symbol,需要在链接器里将lib文件夹中的lib再次链接才行,报错就按如下操作。(以防后续出错,可以直接加上)

            ​​​​​​​        ​​​​​​​        

            ​​​​​​​        ​​​​​​​        ​​​​​​​

            ④添加bin中的dll文件,有些教程没有这一步非常坑人,不过我也很疑惑,为啥bin文件路径添加到各个地方都没有用(系统环境变量都加过),它就是找不到,打不开等等(望大佬告知)。只能将生成的bin文件目录下的dll文件移到windows/system32下才能被检测到。

             ⑤测试自己的代码,调用#include"opencv2/xfeatures2d.hpp"等等,

    三,总结

            换了新电脑得重新配环境,不过本来是用不上opencv了的。但是yolov5学着学着,发现需要用opencv dnn部署yolov5的c++环境,既是为了配合相机的官方库,也是为了加速yolo模型推理。不过最好希望能搞懂tensort,网上都说这个部署加速最强。

            记录一下,希望以后配置环境能快一点。。。

            有问题,欢迎评论区留言讨论。

    四,参考博客

    win10+vs2017+opencv4.5.0+opencv_contrib-4.5.0+cuda源码编译详细教程_fengxinzioo的博客-CSDN博客_opencv4.5编译

    展开全文
  • Opencv 和python结合,其中有opencv的算法分析,是仅有的能结合pyton的opencv文档,其中也有视频摄像的抓取与分析
  • 张正友相机标定Opencv实现,附棋盘图和14张不同角度标定图。 包含完整的工程代码,有详细的注释说明,一键运行。实现了相机标定、输出相机内参、外参、旋转和平移矩阵、标定效果评价、以及使用标定结果对原始棋盘图...
  • OpenCV实现多目三维重建

    千次下载 热门讨论 2016-04-24 14:49:39
    使用OpenCV实现了多图像的三维重建。 使用VS2015开发,程序运行后会读取images目录下的图片进行重建。 重建完成后,可以运行Viewer下的SfMViewer.exe查看重建结果。 详见博客 ...
  • OpenCV实现SfM:双目三维重建

    千次下载 热门讨论 2015-09-02 14:29:19
    使用OpenCV3.0进行双目三维重建。 代码是用VS2013写的,OpenCV版本为3.0且包含扩展部分,如果不使用SIFT特征,可以修改源代码,然后使用官方未包含扩展部分的库。软件运行后会将三维重建的结果写入Viewer目录下的...
  • Python+OpenCV3.3图像处理视频教程

    万人学习 2017-12-08 13:04:57
    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用...
  • 【C++】OpenCV边缘检测示例程序 by浅墨

    千次下载 热门讨论 2014-05-11 22:44:25
    博文《【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑》的配套详细注释源代码。 博文链接: http://blog.csdn.net/poem_qianmo/article/details/25560901 1.已将dll...
  • opencv提取图片中人轮廓

    热门讨论 2016-03-29 19:40:44
    从静态的视频帧中获取的人物图片先二值化,再利用开操作闭操作以及轮廓填充,获取人物轮廓
  • OpenCV图像处理编程实例》-源码-20160801

    千次下载 热门讨论 2016-08-06 12:11:52
    OpenCV图像处理编程实例》-源码,最新更新20160801,支持OpenCV3.1+VS2015,修改若干程序中错误,如遇问题欢迎反馈到zhu1988wei@163.com
  • OpenCV单目视觉定位(测量)C++代码

    热门讨论 2017-08-23 21:29:14
    OpenCV单目视觉定位(测量),能检测识别出自定义的物体标签,并计算出自定义物体距离摄像头光心的X,Y方向距离, 用于无人机/机器人视觉定位。
  • 通过编程识别特定的颜色区域,并进行圈定。
  • 【C++】OpenCV直线检测示例程序 by浅墨

    千次下载 热门讨论 2014-05-26 12:53:41
    博文《【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑》的配套详细注释源代码。 博文链接: http://blog.csdn.net/poem_qianmo/article/details/26977557 1.已将dll打包到Release文件夹下...
  • OpenCV实例精解 普拉蒂克·乔希.pdf
  • opencv_ffmpeg.dll

    千次下载 热门讨论 2016-02-20 13:20:56
    编译opencv3时需要下载的dll文件
  • opencv2.4.6 Part1

    热门讨论 2015-02-03 11:02:34
    opencv2.4.6,现在官网上以及没有了~因为大小限制我把他分为了6卷,总资源只需要3分。
  • Android OpenCV基础(一、OpenCV入门)

    千次阅读 2022-04-03 18:15:58
    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。   OpenCV 的应用领域非常广泛...

    一、OpenCV概述

      OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。

      OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。OpenCV 还提供了机器学习模块,你可以使用正态贝叶斯、K最近邻、支持向量机、决策树、随机森林、人工神经网络等机器学习算法。

    二、OpenCV框架

    2.1 OpenCV整体结构

      OpenCV 使用 C/C++ 开发,同时也提供了 Python、Java、MATLAB等其他语言的接口,并且提供 Windows、Android(Android库下载)、ios等平台的接口。

    1-1Q026141623M5.jpg

      OpenCV是由很多模块组成的,这些模块可以分成很多层:

    • 最底层是基于硬件加速层(HAL)的各种硬件优化。
    • 再上一层是OpenCV核心层,包括core、imgproc、calib3d、objdetect等。
    • 再上一层是opencv_contrib,可以理解为OpenCV的扩展模块,里面包含一些最新的算法,不过API尚未稳定或未充分测试。
    • 接下来是语言绑定和示例应用程序。
    • 处于最上层的是 OpenCV 和操作系统的交互。

    2.2 OpenCV核心模块

      我们主要关注OpenCV核心层,下图显示了 OpenCV核心层中包含的模块:

    模块说明
    core该模块包含 OpenCV 库的基础结构以及基本操作。
    improc图像处理模块包含基本的图像转换,包括滤波以及类似的卷积操作。
    highgui在 OpenCV 3.0中,分割为 imcodecs、videoio 以及 highgui 三部分。 这个模块包含可以用来显示图像或者简单的输入的用户交互函数。这可以看作是一个非常轻量级的 Windows UI 工具包。
    video该模块包含读取和写视频流的函数。
    calib3d这个模块包括校准单个、双目以及多个相机的算法实现。
    feature2d这个模块包含用于检测、描述以及匹配特征点的算法。
    objdectect这个模块包含检测特定目标,比如人脸或者行人的算法。也可以训练检测器并用来检测其他物体。
    ml机器学习模块本身是一个非常完备的模块,包含大量的机器学习算法实现并且这些算法都能和 OpenCV 的数据类型自然交互。
    flannFlann 的意思是“快速最邻近库”。这个库包含一些你也许不会直接使用的方法,但是其他模块中的函数会调用它在数据集中进行最邻近搜索。
    GPU在 OpenCV 中被分割为多个 cuda* 模块。 GPU 模块主要是函数在 CUDA GPU 上的优化实现,此外,还有一些仅用于 GPU 的功 能。其中一些函数能够返回很好的结果,但是需要足够好的计算资源,如果硬件没有GPU,则不会有什么提升。
    photo这是一个相当新的模块,包含计算摄影学的一些函数工具。
    stitching本模块是一个精巧的图像拼接流程实现。这是库中的新功能,但是,就像 Photo 模块一样,这个领域未来预计有很大的增长。
    nonfree在 OpenCV 3.0 中,被移到 opencv_contrib/xfeatures2d。 OpenCV 包含一些受到专利保护的或者受到使用限制的(比如 SIFT 算法)算法。这些算法被隔离到它们自己的模块中,以表明你需要做一些特殊的工作,才可以在商业产品中使用它们。
    contrib在 OpenCV 3.0 中,融合进了 opencv_contrib。 这个模块包含一些新的、还没有被集成进 OpenCV 库的东西。
    legacy在 OpenCV 3.0 中,被取消。 这个模块包含一些老的尚未被完全取消的东西。
    ocl在OpenCV 3.0 中,被取消,取而代之的是 T-API。 这是一个较新的模块,可以认为它和 GPU 模块相似,它实现了开放并行编程的 Khronos OpenCL 标准。虽然现在模块的特性比 GPU 模块少很多,但 ocl 模块的目标是提供可以运行在任何 GPU 或者是其他可以搭载 Khronos 的并行设备。这与 GPU 模 块形成了鲜明的对比,后者使用 Nividia CUDA 工具包进行开发,因此只能在 Nividia GPU 设备上工作。

      在OpenCV github项目中可以看到Opencv核心的所有模块:
    image.png
      如果项目中只需要用到OpenCV中的部分模块,并且项目体积要求比较严格,可根据项目需要裁剪OpenCV,把需要的模块单独打包成so。

    三、集成OpenCV

      在集成OpenCV之前,需要了解一些NDK开发的基础知识(可以参考:Android NDK开发基础)。

      要集成OpenCV,可以从OpenCV release页面直接下载官方编译产物,或者自己去OpenCV github下载并按需编译产物。本文主要介绍官方提供的Android平台OpenCV-4.5.5版本集成方式。

    image.png

    3.1 产物介绍

      在下载了官方Android平台OpenCV-4.5.5产物后,里面内容如下:

    • sample:官方示例;
    • sdk:opencv核心sdk;
      • java:opencv java层;java层包结构与上述opencv模块划分一致,里面提供了对应java类,实际实现采用jni的形式实现;
      • libcxx_helper:存放CMakeList;
      • native:opencv native层;
        • jni:opencv jni层;
        • libs:opencv包含所有核心库及jni的动态库;
        • staticlibs:openvc核心各个模块的静态库;
        • 3rdparty:第三方库;
          拼接图-2.jpeg
            官方产物大小共900M,我们从中选择我们需要的部分进行集成即可,或者从静态库中选择业务中所需要的.a自己编译产物进行集成。

    3.2 Java + Native集成

      如果项目中需要在java层编写OpenCV代码,则需要集成java层及native层。

    3.2.1 OpenCV Java类简介

      在上述OpenCV java目录中,除了提供了OpenCV核心模块的java类之外,org.opencv.android包内还提供了OpenCVNativeLoader加载类、JavaCameraView、CameraGLSurfaceView相机封装等。

      OpenCV java目录中提供的核心模块java类,底层实现都是通过native层实现,java层只引用了native层对象的地址,例如Opencv基础图像类Mat:

    public class Mat {
        /**
        * Native object address
        * native层对象地址
        **/
        public final long nativeObj;
    
        public Mat(long addr) {
            if (addr == 0)
                throw new UnsupportedOperationException("Native object address is NULL");
            nativeObj = addr;
        }
    
        // javadoc: Mat::Mat()
        public Mat() {
            nativeObj = n_Mat();
        }
        // C++: Mat::Mat()
        private static native long n_Mat();
        
        // javadoc: Mat::dims()
        public int dims() {
            return n_dims(nativeObj);
        }
        // C++: int Mat::dims()
        private static native int n_dims(long nativeObj);
    }
    

      可以看到其对应的jni中,都是调用了opencv核心模块的c/c++方法:

    #include "opencv2/core.hpp"
    
    #define LOG_TAG "org.opencv.core.Mat"
    #include "common.h"
    
    using namespace cv;
    /*
     * Class:     org_opencv_core_Mat
     * Method:    n_Mat
     * Signature: (IIILjava/nio/ByteBuffer;J)J
     *
     * Mat::Mat(int rows, int cols, int type, void* data, size_t step)
     */
    JNIEXPORT jlong JNICALL Java_org_opencv_core_Mat_n_1Mat__IIILjava_nio_ByteBuffer_2J
      (JNIEnv* env, jclass, jint rows, jint cols, jint type, jobject data, jlong step);
    
    JNIEXPORT jlong JNICALL Java_org_opencv_core_Mat_n_1Mat__IIILjava_nio_ByteBuffer_2J
      (JNIEnv* env, jclass, jint rows, jint cols, jint type, jobject data, jlong step)
    {
        static const char method_name[] = "Mat::n_1Mat__IIILjava_nio_ByteBuffer_2J()";
        try {
            LOGD("%s", method_name);
            return (jlong) new Mat(rows, cols, type, (void*)env->GetDirectBufferAddress(data), (size_t)step);
        } catch(const std::exception &e) {
            throwJavaException(env, &e, method_name);
        } catch (...) {
            throwJavaException(env, 0, method_name);
        }
    
        return 0;
    }
    

    3.2.2 集成内容

      要在项目中集成OpenCV,首先我们新建一个opencv_sdk模块,将官网产物中的java目录、libcxx_helper目录、native下的lib目录(架构只选择了主流的arm64-v8a、armeabi-v7a),如下所示:

    拼接图-3.jpeg

      至此,opencv_sdk模块集成完毕,可以在其他模块中通过java对象调用opencv的方法。

    3.2.3 简单用法

      下面列举一个简单的例子:在java层通过bitmap创建一个OpenCV的Mat,并打印log。首先在build.gradle中加入依赖:

    dependencies {
        implementation(project(':opencv_sdk'))
    }
    

      然后就可以在app模块使用OpenCV的java类了:

    Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.adventure_time);
    // OpenCV提供的加载libopencv_java4.so的封装类
    OpenCVNativeLoader openCVNativeLoader = new OpenCVNativeLoader();
    openCVNativeLoader.init();
    ByteBuffer buffer = ByteBuffer.allocateDirect(bitmap.getByteCount());
    bitmap.copyPixelsToBuffer(buffer);
    Mat mat = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC4, buffer);
    Log.d("OpenCV", "mat channels:"+mat.channels()+", cols:"+mat.cols()+", rows:"+mat.rows());
    

      运行结果如下,说明Mat已经创建成功:

    D/OpenCV: mat channels:4, cols:3000, rows:4500
    

    3.3 Native集成

      如果项目中只需要在native层编写OpenCV代码,则只需要集成native层即可,可以删除上述的java目录以减小包体积。

      项目中的opencv_sdk模块中只需要引入OpenCV头文件(在官网产物的OpenCV-android-sdk/sdk/native/jni/include目录下)和OpenCV动态库,如下所示:

    Unknown.jpeg

    3.3.1 新建native模块

      首先新建一个sample_native模块来存放jni及native代码,模块结构如下:

    Unknown-1.jpeg

    3.3.2 配置cmake

      在sample_native模块的build.gradle中配置cmake及opencv:

    android {
        defaultConfig {
            ndk {
                // 指定编译的abi架构
                abiFilters "armeabi-v7a", "arm64-v8a"
            }
            externalNativeBuild {
                // cmake配置
                cmake {
                    cppFlags "-std=c++11 -frtti -fexceptions"
                    arguments "-DANDROID_STL=c++_shared"
                    arguments "-DANDROID_TOOLCHAIN=clang"
                    // 配置opencv头文件目录和动态库目录
                    arguments "-DOPENCV_HEADER_DIR=${project.rootProject.project("opencv_sdk").file("include").path}"
                    arguments "-DOPENCV_LIBS_DIR=${project.rootProject.project("opencv_sdk").file("native/libs").path}"
                }
            }
        }
        externalNativeBuild {
            cmake {
                // 构建脚本路径
                path "src/main/cpp/CMakeLists.txt"
                version "3.10.2"
            }
        }
    }
    

      到此就完成了cmake的基本配置,里面通过arguments配置了opencv头文件和动态库的位置,方面后面代码中引入。

    3.3.3 编写jni代码

      在sample_native模块中,创建jni接口如下:

    public class OpenCVSample {
    
        private static boolean isLoadSuccess = false;
    
        static {
            try {
                System.loadLibrary("native-lib");
            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }
        }
    
        public static native void createMat(Bitmap bitmap);
    
    }
    

      接着创建cpp目录,并创建native-lib.h头文件和native-lib.cpp文件,以及CMakeLists.txt,在CMakeLists.txt中配置opencv依赖如下:

    # cmake最低版本号
    cmake_minimum_required(VERSION 3.4.1)
    
    # 导入opencv头文件
    include_directories(${OPENCV_HEADER_DIR})
    
    # add_library:把一个library添加到工程
    add_library(
            native-lib
            SHARED
            native-lib.cpp)
    
    # 添加一个已构建的库,使用IMPORTED
    add_library(opencv_java4 SHARED IMPORTED)
    set_target_properties(opencv_java4
            PROPERTIES IMPORTED_LOCATION
            "${OPENCV_LIBS_DIR}/${ANDROID_ABI}/libopencv_java4.so")
    
    # 首个参数是target,后面的参数是item;target必须先用add_library()创建过;
    target_link_libraries(
            native-lib
            opencv_java4
            jnigraphics
            log )
    

      然后把JNI对应的头文件native-lib.h代码完善如下:

    #include <jni.h>
    #include <android/log.h>
    #include <android/bitmap.h>
    
    #include <opencv2/core.hpp>
    #include <opencv2/imgproc.hpp>
    #include <opencv2/imgproc/types_c.h>
    
    #define TAG    "NativeLibSample"
    #define AndroidLOGD(...)  __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)
    
    extern "C"
    JNIEXPORT void JNICALL
    Java_com_bc_sample_OpenCVSample_createMat(
            JNIEnv* env,
            jclass thiz, jobject bitmap);
    
    void bitmapToMat(JNIEnv *env, jobject bitmap, cv::Mat &dst);
    

      然后,把JNI对应的native-lib.cpp文件代码完善如下,这里在c++代码中创建了Mat,然后打印出Mat的信息:

    #include "native-lib.h"
    
    extern "C"
    JNIEXPORT void JNICALL
    Java_com_bc_sample_OpenCVSample_createMat(
            JNIEnv* env,
            jclass thiz, jobject bitmap) {
        cv::Mat rgbMat;
        // 把java层的bitmap转换为Mat
        bitmapToMat(env, bitmap, rgbMat);
        // log输出Mat的信息
        AndroidLOGD("native mat channels:%d, cols:%d, rows:%d", rgbMat.channels(), rgbMat.cols, rgbMat.rows);
    }
    
    void bitmapToMat(JNIEnv *env, jobject bitmap, cv::Mat &dst) {
        AndroidBitmapInfo info;
        void *pixels = 0;
        try {
            CV_Assert(AndroidBitmap_getInfo(env, bitmap, &info) >= 0);
            CV_Assert(info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 ||
                      info.format == ANDROID_BITMAP_FORMAT_RGB_565);
            CV_Assert(AndroidBitmap_lockPixels(env, bitmap, &pixels) >= 0);
            CV_Assert(pixels);
            dst.create(info.height, info.width, CV_8UC4);
            if (info.format == ANDROID_BITMAP_FORMAT_RGBA_8888) {
                cv::Mat tmp(info.height, info.width, CV_8UC4, pixels);
                tmp.copyTo(dst);
            } else {
                cv::Mat tmp(info.height, info.width, CV_8UC2, pixels);
                cvtColor(tmp, dst, CV_BGR5652RGBA);
            }
            AndroidBitmap_unlockPixels(env, bitmap);
            return;
        }catch (...) {
            AndroidBitmap_unlockPixels(env, bitmap);
            jclass je = env->FindClass("java/lang/Exception");
            env->ThrowNew(je, "Unknown exception in JNI code {nBitmapToMat}");
            return;
        }
    }
    

    3.3.4 运行程序

      最后,在代码中就可以按如下方式调用刚才创建的jni方法:

    Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.adventure_time);
    OpenCVSample.createMat(bitmap);
    

      运行结果如下,说明Mat已经创建成功:

    D/NativeLibSample: native mat channels:4, cols:3000, rows:4500
    

    3.4.5 其他

      如果在打包过程中碰到了动态库重复的问题,可以在app模块的build.gradle中添加如下配置解决:

    android {
        packagingOptions {
            pickFirst 'lib/arm64-v8a/libc++_shared.so'
            pickFirst 'lib/armeabi-v7a/libc++_shared.so'
            pickFirst 'lib/arm64-v8a/libopencv_java4.so'
            pickFirst 'lib/armeabi-v7a/libopencv_java4.so'
        }
    }
    

    The End

    欢迎关注我,一起解锁更多技能:BC的掘金主页~💐 BC的CSDN主页~💐💐
    个人信息汇总.png

    OpenCV官网:https://opencv.org/releases/
    OpenCV官方文档:https://docs.opencv.org/4.5.5/
    OpenCV github:https://github.com/opencv/opencv/tree/master
    OpenCV入门文档:http://c.biancheng.net/opencv/
    OpenCV 入门官方文档
    LearnOpenCV学习资料
    裁剪OpenCV

    展开全文
  • opencv官方帮助文档

    热门讨论 2015-07-05 21:59:35
    最讨厌的就是分享的东西没什么内容还要积分的。
  • 基于opencv的骨架提取代码,利用击中不击中变化实现细化操作。
  • AS中使用配置OpenCV示例

    热门讨论 2015-10-23 15:59:27
    Android Studio中配置OpenCV 请注意博文最下方提醒!!!http://blog.csdn.net/gao_chun/article/details/49359535
  • 基于opencv的双目相机标定代码

    热门讨论 2015-11-23 17:34:26
    双目标定代码。解决方案Opencv已配置好。里面有说明文档和实验图片。可以直接运行,也可以根据自己的需要重新拍摄图像进行双目标定。
  • 【C++】OpenCV检测图片中的角点示例程序 by浅墨

    千次下载 热门讨论 2014-06-08 12:17:44
    博文《【OpenCV入门教程之十六】OpenCV角点检测之Harris角点检测》的配套详细注释源代码。涉及到的核心函数为cornerHarris。 博文链接: http://blog.csdn.net/poem_qianmo/article/details/29356187 说明: 1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 459,477
精华内容 183,790
关键字:

opencv