OpenCV-Python,计算机视觉开发利器
人工智能 ,一个已经被谈论了几十年的概念(最早是 图灵 在 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/pyt honlibs/#opencv
然后通过命令从本地安装:
pip install opencv_python‑3.4.3‑cp37‑cp37m‑win_amd64.whl
这里下载的安装文件 版本 号务必要和你本机的 Python 版本 和 位数 相对应。
如果安装时还有其他问题,可在网上直接搜索报错,通常都会有解决方案,这里不一一赘述。
基本的图像读写:
我们用图像处理的经典范例 Lenna 来做测试
可自行搜索这幅图像的来头:smirk:
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/openc v/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 训练针对其他目标特征的分类器。