一,安装
python版本最好大于等于3.8
进入虚拟环境,键入
pip install opencv-python
继续键入
pip install opencv-contrib-python
当然,你也可以使用conda来进行安装
conda install opencv-python
conda install opencv-contrib-python
至此,opencv的安装过程结束 。
二,图像的基本处理
在图像处理过程中,读取图像、显示图像、保存图像是最基本的操作。本篇文章将简要介绍基本功能与使用。
1.图像的读取,显示,保存
(1)读取
cv2.imread()方法
import cv2
img = cv2.imread(src,type)
src:图片路径
type:图像读取格式
在入门篇中,type除灰度转换以外一般不涉及。
好了,语法我们已经了解了,接下来我们来看看实际使用:
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':
img = cv2.imread('street.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('street',img)
cv2.waitKey(0)
上述代码中就是基本的图像读取与展示,cv2.imshow()是展示图片的方法,必须填入两个参数:图片标题和图片。
cv2.waitKey(0)的用处可以简单理解为一个死循环来维持图片存在,直到键入任意键才会退出循环,如果不加这条语句,图片只会暂存一会。
(2)显示
cv2.imshow()
函数 cv2.imshow()用来显示图像,其语法格式为: None = cv2.imshow( title, img ) 式中: title 是窗口名称。 img 是要显示的图像。
(3)保存
cv2.imwrite()
retval = cv2.imwrite( filename, img[, params] )
retval 是返回值。如果保存成功,则返回逻辑值真(True);如果保存不成功,则返回逻 辑值假(False)。
filename 是要保存的目标文件的完整路径名,包含文件扩展名。
2.图像本质
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':
img = cv2.imread('street.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('street',img)
print(img)
cv2.waitKey(0)
图像本身由许多像素点组成,而这些像素点又可以理解为介于0-255之间的值,所以一幅500x500的图像可以认为是由500x500的二维数组,当然这仅限与黑白照片,一幅彩色照片由三个颜色通道(r,g,b)组成,相当于三副500x500的图像叠在一起。
当了解图像本质是多维数组后,图片的裁剪,旋转,过滤等后续操作本质就是对数组进行一个数学过程。
(1)截取图片
上面我们已经谈到图片本质是多维数组(mxnx3),既然这样截取图片本质也就是对数组进行切片。
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':
#截取图片
img = cv2.imread('street.jpg')
clipped_img = img[0:200,0:200]
cv2.imshow('street_clipped',clipped_img)
cv2.waitKey(0)
如此,我们截取到了左上角200x200的一块区域。
(2)提取颜色通道
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':
img = cv2.imread('street.jpg')
b,g,r = cv2.split(img)
print("b:")
print(b)
print("g:")
print(g)
print("r:")
print(r)
与上文相符,b,g,r三个颜色通道简单来讲就是三个二维数组。
3.杂项
(1)waitKey函数
函数 cv2.waitKey()用来等待按键,当用户按下键盘后,该语句会被执行,并获取返回值。 其语法格式为: retval = cv2.waitKey( [delay] ) 式中: retval 表示返回值。如果没有按键被按下,则返回−1;如果有按键被按下,则返回该按 键的 ASCII 码。 delay 表示等待键盘触发的时间,单位是 ms。当该值是负数或者零时,表示无限等待。 该值默认为 0。 在实际使用中,可以通过函数 cv2.waitKey()获取按下的按键,并针对不同的键做出不同的 反应,从而实现交互功能。例如,如果按下 A 键,则关闭窗口;如果按下 B 键,则生成一个 窗口副本。
目前基本使用waitKey(0),方便我们的测试。
(2)destroyWindow函数
函数 cv2.destroyWindow()用来释放(销毁)指定窗口,其语法格式为: None = cv2.destroyWindow( winname ) 其中,winname 是窗口的名称。 在实际使用中,该函数通常与函数 cv2.waitKey()组合实现窗口的释放。
(3)destroyAllWindows函数
函数 cv2.destroyAllWindows()用来释放(销毁)所有窗口,其语法格式为: None = cv2.destroyAllWindows( )