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 cv2def 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)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好用的样式动画库集合(css、js)

文章目录 前言一、Animate.css二、Anime.js三、CSShake四、Hover.css五、AniJS六、Animista七、Tachyons-animate八、Sequence.js九、Infinite十、OBNOXIOUS.CSS十一、MOTION UI十二、Keyframes.app十三、AnimXYZ十四、Whirl十五、Hamburgers十六、Vivify十七、Magic Animation…

滴滴“闪崩”的背后 - 对企业内网架构的启示

11月27日晚滴滴出现“闪崩”&#xff0c;不仅服务系统崩溃&#xff0c;同时滴滴内网也陷入崩溃状态。大家对服务系统崩溃的影响已有所了解&#xff0c;但对于内网崩溃带来影响的严重程度&#xff0c;可能远超出大多数人的想象&#xff0c;本文将详细介绍什么是内网&#xff0c;…

Spring AOP 代码案例

目录 AOP组成 通知的具体方法类型 引入Spring AOP依赖 定义AOP层 UserController Postman测试 AOP工作流程 AOP组成 切面 : 切⾯&#xff08;Aspect&#xff09;由切点&#xff08;Pointcut&#xff09;和通知&#xff08;Advice&#xff09;组成&#xff0c;它既包含了…

如何生成纯文本的目录树

参考资料&#xff1a; https://ascii-tree-generator.com/ 无需多言&#xff0c;感谢这些前辈的智慧。界面如下&#xff1a;

Elasticsearch:使用 ILM 示例运行降采样 (downsampling)

如果你对降采样还不是很熟的话&#xff0c;请阅读之前的文章 “Elasticsearch&#xff1a;对时间序列数据流进行降采样&#xff08;downsampling)”。这是一个简化的示例&#xff0c;可让你快速了解降采样如何作为 ILM 策略的一部分来减少一组采样指标的存储大小。 该示例使用典…

机器学习第14天:KNN近邻算法

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 介绍 实例 回归任务 缺点 实例 分类任务 如何选择最佳参数 结语 介绍 KNN算法的核心思想是&#xff1a;当我们要判断一个数据为哪一类时…

Find My键盘|苹果Find My技术与键盘结合,智能防丢,全球定位

键盘是最常用也是最主要的输入设备&#xff0c;通过键盘可以将英文字母、汉字、数字、标点符号等输入到计算机中&#xff0c;从而向计算机发出命令、输入数据等。还有一些带有各种快捷键的键盘。随着时间的推移&#xff0c;渐渐的市场上也出现独立的具有各种快捷功能的产品单独…

10个让UI设计更轻松的工具

UI设计软件对设计师来说非常重要。UI设计工具的使用是否直接影响到最终结果的质量&#xff0c;然后有人会问&#xff1a;UI界面设计使用什么软件&#xff1f;这里有一些UI设计师和那些对UI设计感兴趣的朋友列出了10个易于使用和免费的UI设计软件。 即时设计 即时设计是一款免…

【社会网络分析第6期】Ucient实操

一、导入数据处理二、核心——边缘分析三、聚类分析四、网络密度 一、导入数据处理 将数据导入Ucinet首先需要对数据进行处理。 承接上一期的数据格式&#xff1a;【社会网络分析第5期】gephi使用指南 原先得到的数据格式如下&#xff1a; 接下来打开ucinet&#xff1a; 之后…

HI3559AV100下对emmc总线速率的调整

先前使用3559开发板时&#xff0c;一直没觉得emmc会是个问题&#xff0c;但是最近一个国产化的项目中3559配合的是一款国产128G的emmc&#xff0c;因为板上面积限制&#xff0c;走线有点限制&#xff0c;导致uboot启动emmc有时候会失败。 1、报错的打印如下&#xff1a; MMC …

【机器视觉技术】:开创人工智能新时代

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; IT杂谈 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1; 前言&#x1f324;️ 机器视觉技术的实现☁️ 图像采集☁️ 图像处理☁️ 数据建模☁️应用展示…

Phpstudy v8.0/8.1添加 php-7.4.9

1、官网下载最新的php版本 打开Windows版的官网下载&#xff0c;地址&#xff1a;PHP For Windows: Binaries and sources Releases 页面上有不同的PHP版本&#xff0c;这里我们下载的是64位nts版的PHP7.4.9&#xff0c;php-7.4.9-nts-Win32-vc15-x64.zip。 2、解压下载的文…

segment-anything安装教程

文章目录 一. segment-anything安装教程 一. segment-anything安装教程 官网安装说明:https://github.com/facebookresearch/segment-anything anaconda下新建一个环境 conda create -n sam python3.8激活新建的环境 conda activate sam更换conda镜像源 conda config --add ch…

XUbuntu22.04之OBS30.0设置录制音频降噪(一百九十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Nacos作为配置中心的一些知识二

11292327 问&#xff1a;客户端发请求给Nacos服务端&#xff0c;服务端这边会进行哪些处理&#xff1f; 答&#xff1a;客户端发请求给Nacos 服务端 &#xff0c;服务端这边通过ConfigController类的309行的listener方法&#xff0c;进行处理 第一步 获取客户端请求的文件的…

中职组网络安全-web-PYsystem003.img-(环境+解析)

​ web安全渗透 1.通过URL访问http://靶机IP/1&#xff0c;对该页面进行渗透测试&#xff0c;将完成后返回的结果内容作为flag值提交&#xff1b; 访问该网页后发现F12被禁用&#xff0c;使用ctrlshifti查看 ctrlshifti 等效于 F12 flag{fc35fdc70d5fc69d269883a822c7a53e}…

SpringCloud核心组件

Eureka 注册中心&#xff0c;服务的注册与发现 Feign远程调用 Ribbon负载均衡&#xff0c;默认轮询 Hystrix 熔断 降级 Zuul微服务网关&#xff08;这个组件负责网络路由&#xff0c;可以做统一的降级、限流、认证授权、安全&#xff09; Eureka 微服务的功能主要有以下几…

有时出厂重置BIOS是解决电脑问题和保持其最佳性能的好办法,主要有两种方法

​BIOS是计算机开机时启动的第一个程序&#xff0c;它有助于执行一些基本的计算机操作&#xff0c;并管理计算机和安装在计算机上的操作系统之间的命令。与任何其他程序一样&#xff0c;如果在启动计算机时遇到问题或在计算机中添加了新硬件&#xff0c;则可能需要将BIOS重置为…

JMeter怎样测试WebSocket

一、安装WebSocket取样器 1、从JMeter插件管理器官网下载&#xff1a; https://jmeter-plugins.org/ 搜索websocket 1、jetty-http-9.1.2.v20140210.jar 2、jetty-io-9.1.2.v20140210.jar 3、jetty-util-9.1.2.v20140210.jar 4、websocket-api-9.1.1.v20140108.jar 5、w…

【Windows】内网穿透实现hMailServer远程发送邮件

目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网…