人工智能开发实战之OpenCV图像处理
OpenCV 是一款跨平台的计算机视觉和机器学习软件平台,在计算机视觉领域广泛使用,是目前人工智能应用中的重要基础平台。
内容导读
OpenCV介绍
OpenCV常见应用
一、OpenCV介绍
OpenCV 是一款跨平台的计算机视觉和机器学习软件平台,在计算机视觉领域广泛使用,是目前人工智能应用中的重要基础平台。
OpenCV用C++语言编写,它的主要接口也是C++语言接口,但是依然保留了大量的C语言接口。
1、OpenCV有以下特点
(1)开源:根据BSD 3条款许可发布。
(2)优化程度高:OpenCV是一个高度优化的库,专注于实时应用程序。
(3)跨平台:具有C++、Python和Java接口,支持Linux、Mac OS、Windows、iOS和Android。
OpenCV具有如下应用领域功能:运动估算、人脸识别、姿势识别、人机交互、运动理解、对象鉴别、分割与识别、立体视觉、运动跟踪、增强现实(AR技术)等。
基于上述功能实现需要,OpenCV还包括以下基于统计学的机器学习库:Boosting算法、决策树算法、Gradient Boosting算法、EM算法(期望最大化)、KNN算法、朴素贝叶斯分类、人工神经网络、随机森林、支持向量机(SVM)。
2、OpenCV的发展历史
3、安装Python接口的OpenCV 3.4.x版本
Tensorflow安装请参考本站:人工智能开发实战TensorFlow机器学习框架解析
和TensorFlow等第三方模块一样,使用pip工具进行安装,在Anaconda的TensorFlow环境下输入“pip install opencv-python==3.4.0.12”,OpenCV安装过程如图所示。
安装完成后进入Anaconda的TensorFlow环境下,输入“python”进入Python解释器,输入“import cv2”,若无错误信息,则代表安装完成,如图所示。
如果在一些嵌入式设备(如树莓派)上安装Python接口的OpenCV,可以直接下载源码安装或者使用pip命令安装。
注意:
嵌入式设备在使用pip安装Python接口的OpenCV后,会缺少一些运行时必要的库,需要通过apt-get命令安装,包括libatlas3-base、libjasper1、libgst7、python3-gst-1.0、libqtgui4、libqt4-test、libilmbase12、openexr、libavcodec57、libavformat57、libswscale4。
这些库安装完毕后,OpenCV才可以正常使用。
二、OpenCV常见应用
1、摄像头调用
通过cap对象还可以设置视频参数,cap参数如表所示
新建OpenCV项目目录,在OpenCV目录下新建文件,命名为camera.py,在PyCharm中编写代码,实现摄像头调用并显示。
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
2、OpenCV的图像简单处理
(1)加载图像,显示并保存
在OpenCV目录下新建文件,命名为load_pic.py,在PyCharm中编写代码,实现图像加载、显示及保存的功能。
import cv2
img = cv2.imread('pic.jpg',cv2.IMREAD_COLOR)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('pic_copy.png',img, [int(cv2.IMWRITE_JPEG_QUALITY), 95])
cv2.imread(filepath,flags)函数的作用是读入一幅图像,filepath参数表示读入图像的完整路径,flags是读入图像的标志位,flags参数意义如表所示
(2)将图像处理为灰度图和二值化图
在OpenCV目录下新建文件,命名为gray_binary.py,在PyCharm中编写代码,将RGB图像转换为灰度图和二值化图并显示。
(3)图像绘制以及写字
在OpenCV目录下新建文件,命名为draw.py,在PyCharm中编写代码进行图像绘制并显示。
import cv2
img = cv2.imread('draw.jpg', cv2.IMREAD_COLOR)
cv2.line(img, (120, 200), (190, 180), (0, 0, 0), 15)
cv2.line(img, (340, 185), (410, 150), (0, 0, 0), 15)
cv2.line(img, (230, 350), (230, 450), (0, 0, 0), 15)
cv2.line(img, (300, 350), (300, 450), (0, 0, 0), 15)
cv2.rectangle(img, (190, 150), (340, 350), (255, 0, 0), 15)
cv2.circle(img, (265, 80), 70, (0, 0, 255), 15)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'take to your heart', (400,130), font, 1, (0,0,0), 2)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.imwrite('draw_result.png',img, [int(cv2.IMWRITE_JPEG_QUALITY), 95])
cv2.putText()函数的作用是在图像上写字,不加字库的话只接收英文和标点,参数分别为图像、要写的字、坐标、字体、字体大小、颜色、字体粗细。绘制出的结果如图所示。
(4)颜色过滤
在OpenCV目录下新建文件,命名为color_filtering.py,在PyCharm中编写代码来实现颜色过滤并显示。
import cv2
import numpy as np
lower_red = np.array([0, 0, 0])
upper_red = np.array([180, 255, 46])
img = cv2.imread('color_filter.jpg', cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower_red, upper_red)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.imshow('mask',mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
lower_red和upper_red为黑色的HSV阈值,cv2.inRange()函数可设定阈值,将图像显示出来,原图和颜色过滤后的图如图所示。
(5)形态变换
3、图像处理的意义及价值
图像处理的常用方法
更多精彩内容请持续关注本站!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)