人工智能 ,一个已经被谈论了几十年的概念(最早是 图灵 在 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 没报错就是成功了。

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

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

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 里还提供了一些经典开发案例:

人脸检测

使用方法

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的编程教室)里回复关键字 圣诞帽

姿态识别

使用方法

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的编程教室)里回复关键字 姿态

风格迁移

使用方法

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的编程教室)里回复关键字 项目

════

其他文章及回答:

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

python利器怎么编程-OpenCV-Python,计算机视觉开发利器相关推荐

  1. python怎么编写视觉识别_OpenCV-Python,计算机视觉开发利器

    人工智能,一个已经被谈论了几十年的概念(最早是图灵在1950年提出).如今这几年,相关技术的发展速度是越来越快.高大上如无人驾驶.智能安防.AI辅助诊断,接地气如刷脸支付.内容推荐.自动翻译等,众多领 ...

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

    OpenCV 是一个开源的计算机视觉库,可以从 http://opencv.org 获取. OpenCV-Python,计算机视觉开发利器 人工智能,很多应用都涉及到"计算机视觉" ...

  3. python与人工智能编程-最适合人工智能开发的5种编程语言,Python排第一

    原标题:最适合人工智能开发的5种编程语言,Python排第一 文章转载自超图集团,版权归原作者和刊载媒体所有. 近年来,人工智能(AI)正在不断释放科技革命和产业变革积蓄的巨大能量,深刻改变着人类生产 ...

  4. python与人工智能编程-最适合人工智能开发的5种编程语言,你知道几种?

    原标题:最适合人工智能开发的5种编程语言,你知道几种? 私信我或关注微信号:猿来如此呀,回复:学习,获取免费学习资源包. 人工智能技术的提升不仅为企业的运营带来了效率,而且为人民的生活带来了便利. 迄 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> 人工智能,一个已经被谈论了几十年的概念(最早是图灵在1950年提出).如今这几年,相关技术的发展速度是越来越快.高大上如无人驾 ...

  6. spark编程基础python版 pdf_Spark编程基础Python版-第5章-Spark-SQL.pdf

    <Spark编程基础(Python版)> 教材官网:/post/spark-python/ 温馨提示:编辑幻灯片母版,可以修改每页PPT的厦大校徽和底部文字 第5章Spark SQL (P ...

  7. python是什么编程教程-Python 从不懂到入门

    基础知识 什么是编程语言 可以简单的理解为一种计算机和人都能识别的语言 什么是 Python 一种编程语言 安装 Python 开发环境 何为开发环境 简单理解为运行 Python 的平台 去 Pyt ...

  8. python入门作业编程题-python入门(一)作业

    一,流程控制之if...else 1. 如果:女人的年龄>30岁,那么:叫阿姨,否则:叫小妞 1 age_of_girl = 21 2 if age_of_girl >30:3 print ...

  9. python图形化编程实例,python交互式图形编程实例(三)

    本文实例为大家分享了python交互式图形编程实例的第三部代码,供大家参考,具体内容如下 #!/usr/bin/env python3 # -*- coding: utf-8 -*- #时钟 from ...

最新文章

  1. 如何在GNOME中添加自己的菜单项
  2. LeetCode14.最长公共前缀 JavaScript
  3. DataGrid能否动态合并一笔订单下面的多个交易
  4. opencv图像恢复逆滤波_OpenCV之快速的图像边缘滤波算法
  5. [JS]视频总结-第三部分_深入javascript
  6. 重新理解 Monad
  7. tcpdump抓包ftp协议_tcpdump抓包并保存成cap文件
  8. 在64位Windows中使用64位版本ASP.NET 2.0的问题
  9. 长沙4月21日开发者大会暨.NET社区成立大会活动纪实
  10. SSRS:之为用户“NT AUTHORITY\NETWORK SERVICE”授予的权限不足,无法执行此操作。 (rsAccessDenied)...
  11. Ubuntu18.04 LTS Melodic ROS 教程:使用URDF创建一个虚拟机器人模型
  12. kafka结合mysql_logstash集成kafka,mysql实现数据采集
  13. android studio方法的调用树,Android Studio 多层级 Module 对 aar 引用问题解决方法
  14. 【机器学习系列】隐马尔科夫模型第二讲:前向算法、后向算法
  15. HDU 4512 吉哥系列故事——完美队形I(最长公共上升子序列 LCIS)
  16. iphone出现android文件夹,为什么iPhone仍限制每个文件夹页面9个应用程序? | MOS86...
  17. C语言学习笔记(12)——函数基础
  18. VMware组建虚拟局域网方法
  19. MIT公开课 线性代数(1)
  20. 【自动驾驶】高级辅助驾驶系统与车联网

热门文章

  1. 两对光纤收发器用网线连接_光纤那么快,路由器和电脑之间为何不用光纤连接,反而用普通网线...
  2. python 统计文件top IP
  3. numpy vsplit
  4. bzoj 4372: 烁烁的游戏 动态点分治_树链剖分_线段树
  5. 第六周作业(sticky
  6. scala成长之路(2)对象和类
  7. 高级c++头文件bits/stdc++.h
  8. Redis - 事务
  9. Glassfish3 asadmin 常用命令
  10. 直接导入用户信息到discuz ucenter.