教程汇总:python基础入门系列
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。
在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。
此外,OpenCV还提供了Java、python、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。
学习OpenCV开发需要了解基本的计算机颜色表达方式,以及各种颜色模型的特点。
可以像其他三方包安装方法一样直接pip安装opencv-python包(非官方): pip install opencv-python
但我这里不推荐使用上述方法,可以到https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv
网址下载OpenCV的安装包whl文件,注意要根据自己的python版本下载
比如我选择的opencv_python‑4.5.3‑cp37‑cp37m‑win_amd64.whl
,其中4.5.3是OpenCV的版本,cp37表示是适配python3.7的,最后amd64是在64位机电脑上使用的,了解了各字段含义我们就可以选择下载适合自己的版本了。
下载好后放到python安装目录的Scripts目录下C:\Users\USER\AppData\Local\Programs\Python\Python37\Scripts ,在该目录下打开cmd并使用pip install opencv_python‑4.5.3‑cp37‑cp37m‑win_amd64.whl
进行安装。
OpenCV官方文档:https://opencv-python-tutroals.readthedocs.io/en/latest/
另外OpenCV开发过程中我们经常会用的的一些其他三方库也一起装一下:
pip install numpy
pip install matplotlib
首先得了解下图像在计算机中存储形式:
对于采用RGB模式的彩色图片,为三通道图,Red、Green、Blue三原色,按不同比例相加,一个像素块对应矩阵中的一个向量, 如[24,180, 50],分别表示三种颜色的比列, 即对应深度上的数字,如下图所示:
我们知道电子显示屏每个像素点实际上有RGB3个发光单元组成,通过调节像素点的RGB值可以组合成各种颜色,于是就可以显示彩色图像。 对于rgb彩色图来说,在内存中每一个像素点都需要有rgb3个值来表示,每个值取值范围在0-255。而灰度图,也就是只有黑白颜色的图只需要一个通道0-255数值就可以表示。这样灰度图实际上只需要占用原本彩色图1/3的内存。但显示器是需要三个RGB3通道数据的,如果显示灰度图只需要让RGB3个值设置相同的灰度值,再送入显示。
opencv加载图片就是用数组矩阵(numpy的array)存放的,RGB彩图3通道数据构成如下图:
需要注意的是,由于历史遗留问题,opencv采用BGR模式,而不是RGB,这个导致了颜色分量的排布相反。
注意:opencv模组的引用名是cv2,python代码里import cv2
即可
cv2.imread()
imread(img_path,flag) 读取图片,返回图片对象
img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为None
flag:cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入1
cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0
cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1
cv2.imshow()
imshow(window_name,img):显示图片,窗口自适应图片大小
window_name: 指定窗口的名字
img:显示的图片对象
可以指定多个窗口名称,显示多个图片
waitKey(millseconds) 键盘绑定事件,阻塞监听键盘按键,返回一个数字(不同按键对应的数字不同)
millseconds: 传入时间毫秒数,在该时间内等待键盘事件;传入0时,会一直等待键盘事件
destroyAllWindows(window_name)
window_name: 需要关闭的窗口名字,不传入时关闭所有窗口
cv2.imwrite()
imwrite(img_path_name,img)
img_path_name:保存的文件名
img:文件对象
使用示例1:
#coding:utf-8
import cv2
img = cv2.imread(r"C:\Users\Administrator\Desktop\roi.jpg")
# print(img.shape)
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,img_threshold = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)
cv2.imshow("img",img)
cv2.imshow("thre",img_threshold)
key = cv2.waitKey(0)
if key==27: #按esc键时,关闭所有窗口
print(key)
cv2.destroyAllWindows()
cv2.imwrite(r"C:\Users\Administrator\Desktop\thre.jpg",img_threshold)
使用示例2:
import cv2
color_img=cv2.imread('4.jpg')
print(color_img.shape)
# 读取单通道
gray_img=cv2.imread('4.jpg',cv2.IMREAD_GRAYSCALE)
print(gray_img.shape)
#把单通道图像保存后,再读取,仍然是3通道,相当于将单通道复制到3个通道保存
cv2.imwrite('grayscale_4.jpg',gray_img)
reload_grayscale=cv2.imread('grayscale_4.jpg')
print(reload_grayscale.shape)
# 指定jpg质量,范围从1~100,默认95,值越高画质越好,文件越大
cv2.imwrite('anglababy.jpg',color_img,(cv2.IMWRITE_JPEG_QUALITY,20))