社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Crossin的编程教室 • 3 年前 • 1019 次点击  

入门教程、案例源码、学习资料、读者群

请访问: python666.cn


大家好,欢迎来到 Crossin的编程教室 !


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

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

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

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

OpenCV 基于 C++ 编写,但提供了 Python、Ruby、MATLAB 等多种语言接口。这对于习惯使用 Python 开发的人工智能从业者来说非常方便。之前的不少习题和开发案例中,我们都有用到过。今天我们再用几个常见的例子,演示下 OpenCV-Python 的强大功能。

安装:

OpenCV 的安装,不同平台不同版本会有一些差异。安装前需要装好 numpy,强烈建议先安装好 Anaconda,然后直接通过命令安装:

pip install opencv-python

如果你运气好,代码里运行 import cv2 没报错就是成功了。

但大多数时候可能不行。你可以考虑去这里下载安装文件:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv

然后通过命令从本地安装:

pip install opencv_python‑3.4.3‑cp37‑cp37m‑win_amd64.whl

这里下载的安装文件版本号务必要和你本机的 Python 版本和位数相对应。

如果安装时还有其他问题,可在网上直接搜索报错,通常都会有解决方案,这里不一一赘述。

基本的图像读写:

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

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

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 中的图像数据使用了 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 在代码附带的 Samples 里还提供了一些经典开发案例:

人脸检测

https://github.com/opencv/opencv/blob/master/samples/python/facedetect.py

使用方法

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 的人脸识别代码。获取代码请在公众号(Crossin的编程教室)里回复关键字 圣诞帽

姿态识别

https://github.com/opencv/opencv/blob/master/samples/dnn/openpose.py

使用方法

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

详情参见文章: 用 Python 实现抖音尬舞机
获取代码请在公众号(Crossin的编程教室)里回复关键字 姿态

风格迁移

https://github.com/opencv/opencv/blob/master/samples/dnn/fast_neural_style.py

使用方法

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

详情参见文章: Python+OpenCV 十几行代码模仿世界名画
获取代码请在公众号(Crossin的编程教室)里回复关键字 名画

以上便是 OpenCV-Python 的一些简单应用。OpenCV 官方 Samples 代码里还有很多有趣的例子(地址:https://github.com/opencv/opencv )更强大的功能也有待你在开发中逐步体会。

希望这篇管中窥豹的文章可以让各位对  OpenCV 和计算机视觉有一个初步的了解和直观的认识,进而共同参与到人工智能这场技术浪潮中来。

感谢转发和点赞的各位~

_往期文章推荐_

AI让我提前退休(下岗)




如需了解付费精品课程及教学答疑服务
请在Crossin的编程教室内回复: 666

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/153219