OpenCV简介及安装

前言

因为最近想做图像处理、人脸检测/识别之类的相关开发,所以就开始补OpenCV的相关知识,便开个专栏用于记录学习历程和在学习过程中遇到的一些值得注意的重点和坑。

学习过程基本上也是面向官方文档和Google。

简介

OpenCV(开源的计算机视觉库)是基于BSD协议,因此它可免费用于学术和商业用途。

其提供C++,C,Python和Java接口,支持Windows,Linux,Mac OS,iOS和Android。

OpenCV致力于高效运算和即时应用开发。因其是用优化的C/C++编写的,故其可以充分利用多核处理优势。

并且还启用了OpenSL,它可以利用底层异构计算平台的硬件加速。

广泛运用在世界各地,OpenCV拥有超过4.7万人的用户社区和超过1400万的下载次数。

从互动艺术、矿山检查、网络地图到先进的机器人技术都有OpenCV的身影。

它包含了数百个计算机视觉算法。它有一个模块化的结构,囊括了几个共享的或静态的库,其中包括:

  • Core functionality(核心功能):一个简洁基本且模块化的数据结构,包含了多维数组(矩阵)和用于其他模块的基本功能。

  • Image processing(图像处理):包括线性和非线性的图像滤波、几何图像转换(缩放、仿射和透视调整)、颜色模式转换、直方图等等。

  • Video(视频):一个视频分析模块,其包含了运动估计、背景消除和目标跟踪算法。

  • Calib3d:提供基本的多视图几何算法、平面和立体影像校正、物体定位、立体通信算法和三维重建。

  • Features2d:显著特征探测器、描述符和描述符匹配器。

  • Objectect:检测对象和预定义的类的实例(例如:脸部、眼睛、杯子、人、车等等)。

  • Highgui(图形界面):提供一个简单易用的UI。

  • Video I/O:提供一个简单易用的视频捕获和编码解码界面。

  • GPU:来自于不同的OpenCV模块的GPU加速算法。

  • ......一些其他的辅助模块,例如FLANN(神经网络)和Google测试封装、Python绑定等等。

下面来讲一下OpenCV的下载和安装(C++和Python3 API)。

C++

先从官网上下载好文件包:Releases - OpenCV library

https://link.zhihu.com/?target=https%3A//opencv.org/releases.html

建议选择最新的3.3.1 Win Pack。

图片

下载好后,双击运行exe程序解压,选择一个解压后的目录。

(其会自动生成一个opencv目录,不需要单独再创一个opencv目录。另,不建议将其解压到C盘根目录下的Program Files或Program File (x86)目录下,可能会因系统权限导致各种问题)

图片

解压完毕后,将其写入系统的环境变量中,向Path中添加一条:"解压后opencv所在的文件夹目录\opencv\build\x64\vc14\bin",

例如我将其解压在C:\Leon下,则添加:C:\Leon\opencv\build\x64\vc14\bin。

图片

这样OpenCV3.3.1就算安装好了,接下来就在自己IDE中配置一下就行。

例如我C++开发环境是Visual Studio 2017,相应的项目创建配置流程如下:

1. 打开Visual Studio,新建一个项目(快捷键Ctrl+Shift+N),项目名自取,选择好创建目录。

图片

第一步图

2. 新建一个C++文件(快捷键Ctrl+Shift+A)。

图片

第二步图

3. 将菜单栏下的Debug后的x86改为x64。

图片

第三步图

4. 单击右侧窗口的Property Manager(属性管理),或者点击菜单栏中的View(视图)->Other Windows(其他窗口)->Property Manager(属性管理)。

图片

第四步图

5. 右键属性管理窗口中的Debug | x64,选择Property(属性),编辑包含目录。

图片

第五步图

6. 添加三个目录路径并确定。(注意路径是你opencv安装的路径)

图片

第六步图

7. 同理,添加库目录,如图所示。

图片

第七步图1

图片

第七步图2

8. 添加附加依赖项。

链接器->输入->附加依赖项。

将opencv_world331d.lib键盘敲入(注意opencv版本,3.3.1是331,其他版本自行脑补)。

图片

第八步图1

图片

第八步图2

9. 确定,应用。库的导入已经完成了。接下来就可以开始OpenCV相关开发了。

10. 先将以下代码(功能是显示一张图片)写入项目中的Source.cpp文件,编译链接运行(快捷键Ctrl+F5),看是否能跑起来,跑起来了说明配置成功!
 

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
  Mat img = imread("C:\\Users\\11537\\Desktop\\新垣结衣.jpg");    //引号内选一张自己计算机内的图片的路径
  imshow("新垣结衣", img);    //打开一个窗口,显示图片
  waitKey(0);    //在键盘敲入字符前程序处于等待状态
  destroyAllWindows();    //关闭所有窗口
  return 0;
}

测试效果图如下:

图片



Python 3.x ​​​​​​​

相对于C++,Python的Opencv库导入就相对简单很多了。

一提及Python安装第三方库,大家第一时间会想到pip,的确pip是Python第三方库安装的利器。

首先我们得先安装另一个第三方库numpy,这是opencv的依赖库,没有它无法进行python-opencv开发。

很简单,保持有网状态命令行下输入pip install numpy,自动下载安装完后搞定。

比较遗憾的是默认的pip源中没有opencv这个库,不能直接pip install opencv,不过这时候我们可以下载其whl文件,下载地址:Python Extension Packages for Windows

https://link.zhihu.com/?target=https%3A//www.lfd.uci.edu/~gohlke/pythonlibs/

在页面中找到OpenCV栏,根据自己计算机中Python解释器版本选择下载文件。

图片

下载好后,通过命令行到whl文件目录下,pip install [下载的whl完整文件名]。例如pip install opencv_python-3.3.1-cp36-cp36m-win_amd64.whl

tip: 可以通过这个方法下载其他whl文件,用法一样,可以在无网状态下直接pip install whl文件导入第三方库

对于PyCharm用了Virtualenv虚拟环境的用户,可以在IDE中打开命令行界面到该项目venv/Scripts目录下./pip install numpy以及whl文件导入虚拟目录site-packages文件夹中。

同样上个测试代码(功能是显示一张图片):
 

import numpy as np
import cv2

def cv2_imread(file_path, flag=1):
"""解决包含中文的路径cv2.imread无法打开的问题的函数"""
    return cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), flag)

if __name__ == "__main__":

    img = cv2_imread("C:\\Users\\11537\\Desktop\\长泽雅美.jpg")    #第一个参数选一张自己计算机内的图片的路径
    cv2.imshow("Nagasawa Masami", img)    #python的cv2.imshow第一个参数(即窗口名)为中文会乱码,至今未找到有效解决方案
    cv2.waitKey(0)    #在键盘敲入字符前程序处于等待状态
    cv2.destroyAllWindows()    #关闭所有窗口

测试效果图如下:

图片

小结

一次OpenCV初体验,个人觉得可能是历史遗留问题(以前的OpenCV是完全由C实现的),OpenCV的OOP特性并不强,跟Python的另一个图像库pillow相比用起来感觉有点怪。

不过不得不说,OpenCV还是挺强大的。至于C++和Python关于OpenCV接口问题,其实实现都大同小异,也没必要纠结于到底用C++好还是Python好,移植重构很容易。

后续打算记录一下OpenCV关于图像和基于矩阵处理的相关笔记。

​​​​​​​

参考文献

OpenCV: Introduction:

https://link.zhihu.com/?target=https%3A//docs.opencv.org/master/d1/dfb/intro.html

OpenCV学习笔记(一) OpenCV简介及安装 (qq.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/189987.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十大排序之归并排序(详解)

文章目录 &#x1f412;个人主页&#x1f3c5;算法思维框架&#x1f4d6;前言&#xff1a; &#x1f380;归并排序 时间复杂度O(n*logn)&#x1f387;1. 算法步骤思想&#x1f387;2、动画演示&#x1f387;3.代码实现 &#x1f412;个人主页 &#x1f3c5;算法思维框架 &#…

渗透测试【一】:渗透测试常见问题

渗透测试【一】&#xff1a;渗透测试常见问题 1、问题清单2、问题现象及解决办法2.1、点击劫持2.2、用户枚举2.3、Springboot未授权访问2.4、Swagger未授权访问2.5、Host头注入2.6、任意文件上传2.7、敏感路径泄露2.8、跨域资源共享2.9、Spring Cloud Gateway RCE2.10、Content…

vsVode C++开发远程虚拟机工程配置

在使用VS Code进行C/C的开发过程中&#xff0c;有三个至关重要的配置文件&#xff0c;分别是 tasks.json, launch.json 和 c_cpp_properties.json 1. tasks.json tasks.json 是在 vscode 中辅助程序编译的模块&#xff0c;可以代你执行类似于在命令行输入 “gcc hello.c -o h…

文件搜索工具HoudahSpot mac中文版特点

HoudahSpot mac是一款文件搜索工具&#xff0c;它可以帮助用户快速准确地找到文件和文件夹&#xff0c;支持高级搜索和过滤&#xff0c;同时提供了多种视图和操作选项&#xff0c;方便用户进行文件管理和整理。 HoudahSpot mac软件特点 高级搜索和过滤功能&#xff1a;软件支持…

大数据项目--学习笔记

新零售项目介绍 1&#xff0c;行业背景介绍 一&#xff0c;百货商店 百货商店是世界商业史上第一个实行新销售方法的现代大量销售组织。其新型销售方法有&#xff1a; 1&#xff0e;顾客可以毫无顾忌地、自由自在地进出商店&#xff1b; 2&#xff0e;商品销售实行“明码标价…

antv/g6的学习总结

新建一个简单实例 1、使用命令行在项目目录下执行以下命令 cnpm install --save antv/g6 2、创建容器 <div id"mountNode"></div> 3、在需要用的 G6 的 JS 文件中导入 import G6 from antv/g6; 4、 数据准备 引入 G6 的数据源为 JSON 格式的对象。…

Linux shell编程学习笔记29:shell自带的 脚本调试 选项

Linux shell脚本的调试方法比较多&#xff0c;上次我们探讨和测试了shell内建命令set所提供的一些调试选项&#xff0c;其实 shell 本身也提供了一些调试选项。我们以bash为例来看看。 1 bash 的命令行帮助信息&#xff08;bash --help&#xff09; purleEndurer csdn ~ $ ba…

YOLOv5轻量化改进之mobilenetv3,更换mobilenetv3中的注意力机制。

目录 一、原理 二、代码 三、YOLOv5改进 一、原理 我们提出了基于互补搜索技术和新颖架构设计相结合的下一代mobilenet。MobileNetV3通过硬件网络架构搜索(NAS)和NetAdapt算法的结合来调整到移动电话cpu,然后通过新的架构进步进行改进。本文开始探索自动搜索算法和网络设计如…

Java王者荣耀小游戏

Background类 package LX;import java.awt.*; //背景类 public class Background extends GameObject{public Background(GameFrame gameFrame) {super(gameFrame);}Image bg Toolkit.getDefaultToolkit().getImage("C:\\Users\\ASUS\\Desktop\\王者荣耀图片\\Map.jpg&…

【Spring整合MyBatis】Spring整合MyBatis的具体方法

在前面写的博客中&#xff0c;介绍了MyBatis通过配置方式和通过注解方式写的方法&#xff1a; 【Spring集成MyBatis】MyBatis诞生及代码快速入门&#xff08;非注解开发&#xff09;【Spring集成MyBatis】MyBatis的Dao层实现&#xff08;基于配置&#xff0c;非注解开发&#…

前端学习网站推荐

1.菜鸟教程&#xff08;程序员必备&#xff09;菜鸟教程 - 学的不仅是技术&#xff0c;更是梦想&#xff01; 2.npm库 npm | Home 3.uniapp学习官网 uni-app官网 4.vue官网 快速上手 | Vue.js 5.ECharts图表 Apache ECharts 6.ES6学习 ES6 入门教程 7.Three.js学习 Three.js…

17. Python 数据库操作之MySQL和SQLite实例

目录 1. 简介2. 使用PyMySQL2. 使用SQLite 1. 简介 数据库种类繁多&#xff0c;每种数据库的对外接口实现各不相同&#xff0c;为了方便对数据库进行统一的操作&#xff0c;大部分编程语言都提供了标准化的数据库接口&#xff0c;用户不需要了解每种数据的接口实现细节&#x…

Python教程:DataFrame数据中使用resample计算月线平均值

在pandas库中&#xff0c;DataFrame可以使用resample()方法来对时间序列数据进行重采样。重采样是将原始数据按照指定的频率进行重新组织&#xff0c;以便进行更细粒度的分析或转换。下面是一个示例&#xff0c;演示如何使用resample()方法&#xff1a; # Author : 小红牛 # 微…

uiautomator2 无法连接 ATX-Agent

最近需要写个安卓自动项目&#xff0c;本身不想用appium 。主要是appium需要安装的依赖太多&#xff0c;一单换个环境又要配置新的环境。但是ATX-Agent装好之后怎么都连接不是。 报错信息如下&#xff1a; .........省略............ uiautomator2.exceptions.GatewayError: (…

解密 sqli靶场第一关:一步一步学习 SQL 注入技术

目录 一、判断是否存在注入点 二、构造类似?id1 --的语句 三、判断数据表中的列数 四、使用union联合查询 五、使用group_concat()函数 六、爆出数据库中的表名 七、爆出users表中的列名 八、爆出users表中的数据 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很…

肾合胶囊 | 冬不养肾春易病,若出现了这六大表现,小心是肾虚!

冬季作为一年中最寒冷的季节&#xff0c;自然万物皆静谧闭藏&#xff0c;而肾具有潜藏、封藏、闭藏精气的特点&#xff0c;是封藏之本&#xff0c;肾的脏腑特性与冬季相通应&#xff0c;所以在冬季更应该重视养肾。 而现在正值初冬&#xff0c;正是开始养肾的最佳时间。此时培…

肾合胶囊 | “导龙入海,引火归元”——浅谈中医治法中的“引火归元”!

中医有许多特色的治疗方法&#xff0c;医家更是给它们起了文艺的名字。逆流挽舟、提壶揭盖、增水行舟&#xff0c;这些治疗方法无不体现了中医对生活、对自然的深入观察&#xff0c;并将这些自然现象与临床相结合&#xff0c;创立了一个个行之有效的方剂。 我们今天谈一谈“引…

【Linux】第二十站:模拟实现shell

文章目录 一、shell的实现细节1.shell的一些细节2.用户名、主机名、工作目录2.输入命令3.改为循环4.切割字符串5.普通命令的执行6.内建命令的处理7.子进程的退出码8.总结 二、模式实现shell完整代码 一、shell的实现细节 1.shell的一些细节 shell操作系统的一个外壳程序。 s…

字符串原地旋转

记录一下做的练习题 字符串原地旋转&#xff1a;五 三 mat [[1,2,3],[3,4,5],[4,5,6]] tag0 total 0 for i in mat:total total i[tag]tag 1 print(total) 四 X [[12,7,3],[4,5,6],[7,8,9]] Y [[5,8,1],[6,7,3],[4,5,9]] res [[0,0,0],[0,0,0],[0,0,0]] for i in rang…

阶梯排列硬币

题意&#xff1a; 你总共有 n 枚硬币&#xff0c;并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯&#xff0c;其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。 给你一个数字 n &#xff0c;计算并返回可形成 完整阶梯行 的总行数。 示例 1&#xff…