资讯专栏INFORMATION COLUMN

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

阿罗 / 3134人阅读

摘要:而这其中,很多应用都涉及到计算机视觉这样一个细分领域。常见的图像处理灰度图二值化平滑边缘提取这几种都属于数字图像处理的常用方法。对这方面知识感兴趣的,可以找本数字图像处理的相关教材系统地看一遍,了解数字图像处理的基础。

人工智能 ,一个已经被谈论了几十年的概念(最早是 图灵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_python3.4.3cp37cp37mwin_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 和计算机视觉有一个初步的了解和直观的认识,进而共同参与到人工智能这场技术浪潮中来。

获取更多学习资源和代码实例,请在公众号(Crossin的编程教室)里回复关键字 项目

════

其他文章及回答:

如何自学Python|新手引导|精选Python问答|Python单词表|人工智能|嘻哈|爬虫|我用Python|高考|requests|AI平台

欢迎搜索及关注: Crossin的编程教室

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45009.html

相关文章

  • 超不清视频播放器-用Python将视频转成字符

    摘要:一幅图像全部转成字符序列后,就可以直接在控制台输出了。读取视频使用了,并直接用它提供的方法转了灰度图,在之前的文章中也有过介绍,计算机视觉开发利器这一步比较重要,因为有的视频分辨率很高,直接一个像素转一个字符的话量太大,所以先缩小图片。 今天分享的这段代码,看起来没啥实际用处,而且有些反潮流,因为现如今大家看视频都追求更高分辨率的超清画质,而我们这个,是 一个超不清的视频播放器 : 在...

    DobbyKim 评论0 收藏0
  • 常用的十大python图像处理工具

    摘要:但无论是用于何种用途,这些图像都需要进行处理。图像处理中的常见任务包括显示图像,基本操作如裁剪翻转旋转等,图像分割,分类和特征提取,图像恢复和图像识别。图像处理系统有时被称为图像处理的瑞士军刀。 showImg(https://segmentfault.com/img/remote/1460000019631626); 原文标题:10 Python image manipulation...

    Crazy_Coder 评论0 收藏0
  • Python中的十大图像处理工具

    摘要:之成为图像处理任务的最佳选择,是因为这一科学编程语言日益普及,并且其自身免费提供许多最先进的图像处理工具。该库包含基本的图像处理功能,包括点操作使用一组内置卷积内核进行过滤以及颜色空间转换。图像处理系统有时被称为图像处理的瑞士军刀。 showImg(https://segmentfault.com/img/remote/1460000019442221);编译:张秋玥、小七、蒋宝尚 本...

    yuanxin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<