目录
1.OpenCV环境配置
1.1安装OpenCV
cmd命令行或pycharm终端窗口:
pip install opencv-python
1.2时间评估
通过时钟周期数除以电脑主频来测量运行时间(单位:s)
import cv2
start = cv2.getTickCount()
print(10*10*10)
end = cv2.getTickCount()
print('程序运行:'+str((end-start)/cv2.getTickFrequency())+'s')
1.3 优化原则
- Numpy的运行速度并不一定比Python语法快,元素数量较少时,用Python基本语法。
- 尽量避免使用循环,尤其嵌套循环。
- 优先使用OpenCV/Numpy中封装好的函数。
- 尽量将数据向量化,变成Numpy的数据格式。
- 尽量避免数组的复制操作。
2.图片载入、显示、保存
2.1 imread(p1,p2)——加载图片
img = cv2.imread('03.jpg',0)
传入参数:p1为图片文件名,p2为读入方式:
值 | 效果 |
---|---|
cv2. IMREAD_COLOR/1 | 彩色图 |
cv2.IMREAD_GRAYSCALE/0 | 灰度图 |
cv2.IMREAD_UNCHANGED/-1 | 包含透明通道的彩色图 |
2.2 imshow(p1,p2)——显示图片
cv2.namedWindow('test',cv2.WINDOW_NORMAL)#创建一个窗口,参数为窗口名和适应方式——cv2.WINDOW_AUTOSIZE:窗口大小自适应图片;cv2.WINDOW_NORMAL:表示窗口大小可调整(图片较大时)。
cv2.imshow('test',img)
cv2.waitKey(0) #等待时间(ms),传入0会一直等待。
2.3 imwrite(p1,p1,p3)——保存图片
-
图片格式
常见图片格式 全称 解释 bmp Bitmap 不压缩 jpg Joint Photographic Experts Group 有损压缩方式 png Portable Network Graphics 无损压缩方式 -
代码
cv2.imwrite('03-bmp.bmp',img) cv2.imwrite('03_jpg20.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY),20]) cv2.imwrite('03_jpg100.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY),100]) cv2.imwrite('img_png.png',img) cv2.imwrite('img_png5.png',img,[int(cv2.IMWRITE_PNG_COMPRESSION),5]) cv2.imwrite('img_png9.png',img,[int(cv2.IMWRITE_PNG_COMPRESSION),9])
-
传入参数:p1:保存后的文件名;p2:要保存的图片;p3:控制保存质量:
cv2.IMWRITE_JPEG_QUALITY:jpg质量控制,取值0~100,值越大,质量越好,默认为95 cv2.IMWRITE_PNG_COMPRESSION:png质量控制,取值0~9,值越大,压缩比越高,默认为1
容量大小跟原图的容量没有直接关系,而是取决于原图的分辨率大小和原图本身的内容(压缩方式),另外,容量变大不代表画质提升。
2.4 扩展:使用Matplotlib库处理图片
- OpenCV中的图像是以BGR的通道顺序存储的,但Matplotlib是以RGB模式显示的,所以直接在Matplotlib中显示OpenCV图像会出现问题,因此需要转换一下。
- BGR -> RGB的两种方式:
img[:,:,::-1]
表示BGR翻转,变成RGB。- cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
import cv2
import matplotlib.pyplot as plt
import matplotlib.image as pli
# 1.显示灰度图
img = cv2.imread('img/04.jpg', 0)
plt.imshow(img, cmap='gray')
plt.show()
# 2.显示彩色图
img = cv2.imread('img/04.jpg')
new_img = img[:, :, ::-1]
# new_img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.subplot(122)
# plt.xticks([])
# plt.yticks([])
plt.imshow(new_img)
plt.show()
# 3.加载保存图片
img = pli.imread('img/04.jpg')
plt.imshow(img)
plt.savefig('img/04_copy.png')
plt.show()
小结
- 操作比较
功能 | opencv函数 | Matplotlib函数 |
---|---|---|
加载图片 | cv2.imread(‘文件名’,读入方式) | pli.imread(‘文件名’) |
显示图片 | cv2.imshow(‘窗口名’,图片对象) | plt.imshow(图片对象) plt.show() |
保存图片 | cv2.imwrite(‘保存文件名’,图片对象) | plt.imshow(图片对象) plt.savefig(‘保存文件名’) |
-
用Matplotlib显示OpenCV图像必须先转换:GBR -> RGB:
img[:,:,::-1]
表示BGR翻转,变成RGB;- cv2.cvtColor(img,cv2.COLOR_BGR2RGB)。
-
opencv中的imshow方法会通过窗口显示图像;Matplotlib中显示图像除了要使用imshow方法还要show方法。
-
Matplotlib中保存图像必须先用imshow方法再用savefig方法,否则会失败。