导入函数库
在图像处理中主要的函数库有OpenCV、Numpy,在cmd中安装对应的模块即可。
OpenCv是因特尔公司基于C++版的图像处理工具包,可以理解为C++版的Matlab,建立这个工具的目的也是为了大家能够在一个共同架构的基础上建造摩天大楼,而不是各自为战在自己的地基上盖小平房。OpenCV最大的好处就是面向开发,稳定性好而且开源。
Numpy是Python的线性代数库,他和Matplotlib(绘图库)一起使用的这个组合可以基本替代Matlab。Numpy可执行的操作主要有数组的算数和逻辑运算、傅立叶变换和用于图形操作的例程与线性代数有关的操作,NumPy 拥有线性代数和随机数生成的内置函数。且Numpy是开源的。
图像处理看似是对图像进行修改,但是事实上图像的背后是数学问题(矩阵运算)。每一个图像由若干个像素点组成,其中每个像素点记录的便是图像的信息,如彩色图像则会在每个像素点中(小方格)依据类型的不同,如RGB、CSV等方式记录下每个格子的颜色是什么。
GUI功能
这一小节主要有三个点:读取图像、显示图像和保存新图像三个功能
- 读取
以imread函数实现。
参数->
filename为文件名、flags= 为读取图像的形式
flag = cv.IMREAD COLOD 加载的为彩色图像
flag = cv.IMREAD GRAYSCALE加载的为灰色色图像
flag = cv.IMREAD UNCHANGED加载的为原格式的图像
同时也可以通过1、0、-1来表示这三个参数,而不是三个flag
- 显示
以imshow函数实现。
参数->
winname为窗口名、mat为需要显示的图片
但是关于mat有一个细节要注意:
A)如果图像数据类型是8U(8位无符号),则直接显示。
B)如果图像数据类型是16U(16位无符号)或32S(32位有符号整数),则imshow函数内部会自动将每个像素值除以256并显示,即将原图像素值的范围由[0~255*256]映射到[0~255]。
C)如果图像数据类型是32F(32位浮点数)或64F(64位浮点数),则imshow函数内部会自动将每个像素值乘以255并显示,即将原图像素值的范围由[0~1]映射到[0~255](注意:原图像素值必须要归一化)
显示函数在使用后要搭配另一个函数waitKey()使用,否则窗口会只出现一下就消失。
waitKey()是一个等待键盘输入的函数,参数以毫秒计数的。例如waitKey(5)便会每5毫秒扫描一次,如有键按下则继续,如果参数为0,他会一直等待键盘按下。
这个函数非常重要,可以接连处理许多其他的GUI事件。
- 保存
以imwrite()函数实现
参数->
第一个参数filename为文件名,第二个参数img为需要输入的图像
如cv2.imwrite(r"D:\Document\\CE\\CV\\t1_1920x1280.png", img)
例如:按下s后便会保存下。
import cv2
import numpy as np
im1 = cv2.imread('car_test2.jpg', flags=cv2.IMREAD_COLOR)
im2 = cv2.imread('car_test2.jpg', 0)
cv2.imshow('im1',im1)
cv2.imshow('im2',im2)
k = cv2.waitKey(0)
if k == ord('s'):
cv2.imwrite('test00.png', im1)
cv2.destroyAllWindows()
im1.shape()