OpenCV-Python,计算机视觉开发利器

栏目: Python · 发布时间: 7年前

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

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

OpenCV-Python,计算机视觉开发利器

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

OpenCV-Python,计算机视觉开发利器
来自《2017年人工智能行业发展研究报告白皮书》- IT耳朵&IT桔子

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

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

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

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

OpenCV-Python,计算机视觉开发利器
可自行搜索这幅图像的来头

最基本的 图像读写

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)
复制代码

输出:

OpenCV-Python,计算机视觉开发利器
OpenCV-Python,计算机视觉开发利器

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

常见的图像处理:

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)
复制代码

输出:

OpenCV-Python,计算机视觉开发利器

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

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

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

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

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

使用方法:

python facedetect.py
复制代码

核心代码:

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

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

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

OpenCV-Python,计算机视觉开发利器

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

使用方法:

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

核心代码:

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()
复制代码

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

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

OpenCV-Python,计算机视觉开发利器

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

使用方法:

python fast_neural_style.py --model starry_night.t7
复制代码

核心代码:

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()
复制代码

风格迁移代码基于 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 和计算机视觉有一个初步的了解和直观的认识,进而共同参与到人工智能这场技术浪潮中来。

想获取更多学习资源和代码实例,欢迎关注我们的公众号 Crossin的编程教室 ,并在其中回复关键字 项目


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Analytics 2.0

Web Analytics 2.0

Avinash Kaushik / Sybex / 2009-10-26 / USD 39.99

The bestselling book Web Analytics: An Hour A Day was the first book in the analytics space to move beyond clickstream analysis. Web Analytics 2.0 will significantly evolve the approaches from the fir......一起来看看 《Web Analytics 2.0》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具