美文网首页python热爱者Python新世界python
OpenCV+Python!打遍天下无敌手!是真的强!

OpenCV+Python!打遍天下无敌手!是真的强!

作者: 轻松学Python111 | 来源:发表于2018-10-28 15:22 被阅读8次

人工智能,一个已经被谈论了几十年的概念。如今这几年,相关技术的发展速度是越来越快。高大上如无人驾驶、智能安防、AI辅助诊断,接地气如刷脸支付、内容推荐、自动翻译等,众多领域借助人工智能的力量而进化。从百度搜索指数的变化,也能从一个侧面反映出关注度在不断上升。

OpenCV+Python!打遍天下无敌手!是真的强!

而这其中,很多应用都涉及到“ 计算机视觉 ”这样一个细分领域。简单来说,就是将图像信息转化为计算机可以处理的数字信息,从而让计算机能“看得见”。这个信息不仅仅是二维的图片,也包括三维场景、视频序列等。基本上所有需要用到摄像头、图片、视频的应用场景,都离不开计算机视觉的支持。因此,这也是人工智能领域中比较热门的一个方向。

OpenCV+Python!打遍天下无敌手!是真的强!

来自《2017年人工智能行业发展研究报告白皮书》- IT耳朵&IT桔子

而说到计算机视觉,就不能不提到 OpenCV ,它是一个历史悠久、功能丰富、社区活跃的开源视觉开发库。一方面,它提供了计算机视觉以及图像处理方面最常用最基础的功能支持,是开发的必备工具;另一方面,它在新版本中紧跟潮流,加入对新的算法、硬件的支持(v3.3 正式引入 DNN)。

OpenCV 基于 C++ 编写,但提供了 Python、Ruby、MATLAB 等多种语言接口。这对于习惯使用 Python 开发的人工智能从业者来说非常方便。Python 本身的易用性和数值计算库(如 numpy、pandas),加上 OpenCV 在视觉方面的众多功能,让 OpenCV-Python 成为一个效率极高的视觉开发利器。今天我们就用几个常见的例子,演示下 OpenCV-Python 的强大和易用。

OpenCV 的安装,不同平台不同版本会有一些差异,网上有很多教程,这里不赘述。需要提醒的是,由于 Python 和 OpenCV 版本都比较多,安装时务必要 确认版本及系统位数 的对应。另外我个人建议使用 Anaconda 环境安装。

我们用图像处理的经典范例 Lenna 来做测试:

OpenCV+Python!打遍天下无敌手!是真的强!

可自行搜索这幅图像的来头

最基本的 图像读写

<pre>import cv2 as cv

读图片

img = cv.imread('img/Lenna.png')

图片信息

print('图片尺寸:', img.shape)
print('图片数据:', type(img), img)

显示图片

cv.imshow('pic title', img)
cv.waitKey(0)

添加文字

cv.putText(img, 'Learn Python with Crossin', (50, 150), cv.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 4)

保存图片

cv.imwrite('img/Lenna_new.png', img)
复制代码
</pre>

输出:

OpenCV+Python!打遍天下无敌手!是真的强! OpenCV+Python!打遍天下无敌手!是真的强!

OpenCV-Python 中的图像数据使用了 numpy 库的 ndarray 类型进行管理,便于进行各种数值计算和转换。

常见的图像处理:

<pre>import numpy as np

灰度图

img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imwrite('img/Lenna_gray.png', img_gray)

二值化

_, img_bin = cv.threshold(img_gray, 127, 255, cv.THRESH_BINARY)
cv.imwrite('img/Lenna_bin.png', img_bin)

平滑

img_blur = cv.blur(img, (5, 5))
cv.imwrite('img/Lenna_blur.png', img_blur)

边缘提取

_, contours, _ = cv.findContours(img_bin, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
img_cont = np.zeros(img_bin.shape, np.uint8)
cv.drawContours(img_cont, contours, -1, 255, 3)
cv.imwrite('img/Lenna_cont.png', img_cont)
复制代码
</pre>

输出:

OpenCV+Python!打遍天下无敌手!是真的强!

这几种都属于 数字图像处理 的常用方法。OpenCV-Python 基本都封装好的接口,只需一两行代码就能完成,在实际项目开发中非常方便。

我们编程教室之前的“ 每周习题 ”里,和图像相关的题目基本都可以用 OpenCV-Python 来解决。

对这方面知识感兴趣的,可以找本数字图像处理的相关教材系统地看一遍,了解数字图像处理的理论基础会很有帮助。

除了基础功能,OpenCV 在代码附带的 Samples 里还提供了一些经典开发案例:

人脸检测 github.com/opencv/open…

使用方法:

<pre>python facedetect.py
复制代码
</pre>

核心代码:

<pre>cascade = cv.CascadeClassifier("haarcascade_frontalface_alt.xml")
rects = cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=4, minSize=(30, 30), flags=cv.CASCADE_SCALE_IMAGE)
复制代码
</pre>

此功能基于** Haar 分类器**实现,项目中附带有训练好的分类器文件。此外,你还可以使用 OpenCV 训练针对其他目标特征的分类器,以用来检测其他物体。

我们之前的开发案例《 Python 送你一顶圣诞帽 》就使用了 OpenCV-Python 的人脸识别代码。

OpenCV+Python!打遍天下无敌手!是真的强!

题外话!如果还有在入门阶段的小萌新们的话,就私信我!我送大量的PDF书籍!精心整理的,希望大家能早日入门!01 02这样子私信即可!

姿态识别 github.com/opencv/open…

使用方法:

<pre>python openpose.py --model pose.caffemodel --proto pose.prototxt --dataset MPI
复制代码
</pre>

核心代码:

<pre>net = cv.dnn.readNetFromCaffe(args.proto, args.model)
inp = cv.dnn.blobFromImage(frame, 1.0 / 255, (inWidth, inHeight), (0, 0, 0), swapRB=False, crop=False)
net.setInput(inp)
out = net.forward()
复制代码
</pre>

在 3.3 版本后,OpenCV 正式引入 DNN(深度神经网络) ,支持 Caffe、TensorFlow、Torch/PyTorch 等主流框架的模型,可用以实现图像的识别、检测、分类、分割、着色等功能。

姿态识别代码基于 CMU 的 openpose 项目实现( github.com/CMU-Percept… ),运行时所需的模型(.caffemodel)和配置文件(.prototxt)可从此项目中下载。

OpenCV+Python!打遍天下无敌手!是真的强!

风格迁移 github.com/opencv/open…

使用方法:

<pre>python fast_neural_style.py --model starry_night.t7
复制代码
</pre>

核心代码:

<pre>net = cv.dnn.readNetFromTorch(args.model)
net.setPreferableBackend(cv.dnn.DNN_BACKEND_OPENCV);
inp = cv.dnn.blobFromImage(frame, 1.0, (inWidth, inHeight), (103.939, 116.779, 123.68), swapRB=False, crop=False)
net.setInput(inp)
out = net.forward()
复制代码
</pre>

风格迁移代码基于 ECCV 2016 的论文《 Perceptual Losses for Real-Time Style Transfer and Super-Resolution 》实现( github.com/jcjohnson/f… ),使用了 Torch 训练好的模型,多种风格模型文件可从此项目中下载。

OpenCV+Python!打遍天下无敌手!是真的强!

我们之前的文章 Python+OpenCV 十几行代码模仿世界名画 里有关于图像风格迁移更详细的介绍。

以上便是 OpenCV-Python 的一些简单应用。OpenCV 官方 Samples 代码里还有很多有趣的例子( github.com/opencv/open… ),更强大的功能也有待你在开发中逐步体会。希望这篇管中窥豹的文章可以让各位对 OpenCV 和计算机视觉有一个初步的了解和直观的认识,进而共同参与到人工智能这场技术浪潮中来。

相关文章

  • OpenCV+Python!打遍天下无敌手!是真的强!

    人工智能,一个已经被谈论了几十年的概念。如今这几年,相关技术的发展速度是越来越快。高大上如无人驾驶、智能安防、AI...

  • 夏小贱的小手绘

    二哈组合 打遍天下无敌手

  • 单身梦游

    打遍天下无敌手, 唯我单身能拥有! 游遍全球每个州, ...

  • 无力感

    有些人会遇强则强,就像武侠小说里的绝世高手。打遍天下无敌手之后,还会有独孤求败的诉求。偶尔遇到新奇的招式,会激发出...

  • 卡之家分析DNF剑魂改版后猛龙是否真的猛

    卡之家分析DNF剑魂改版后猛龙是否真的猛!前几日卡之家小编喜欢上了斗地主,游戏技能各种研究,自认打遍天下无敌手,用...

  • 多维度的夸奖一个人

    今天对比了一下“打遍天下无敌手”和“前无古人,后无来者”这两句话,都是形容一个厉害,但是后者更胜一筹。 “打遍天下...

  • 世界简史道尽中西方文化的辉煌、衰落与复兴

    最近看这本书,得到以下启示: 1.蒙古族打遍世界无敌手 我对于书中描述的蒙古族打遍天下无敌手印象深刻,成吉...

  • “大牛”打遍天下无敌手

    话说有这么一个“打遍天下无敌手”的人是何种景象呢? “大牛”是她的绰号。所在销售部门,部门所有人都叫她“大牛”,主...

  • 谈语文

    语文,作为学生时期三大基础科目之一,个人觉得是不怎么被重视的,理科学得好,打遍天下无敌手,数学作为理科之首...

  • 从教学看人工智能应用

    自从围棋程序AlphaGo连续战胜世界顶尖棋手李世石与柯洁,打遍天下无敌手之后,人工智能(Artificial I...

网友评论

本文标题:OpenCV+Python!打遍天下无敌手!是真的强!

本文链接:https://www.haomeiwen.com/subject/rpoptqtx.html