Opencv学习笔记(3)

发布时间 2023-11-30 14:35:38作者: taohuaxiaochunfeng

Opencv库常见函数

1、读取指定图片

语法:cv2.imread()函数可以用于读取指定图片,使用时需要先导入opencv库

1 import cv2                            # 导入opencv库
2 sample = cv2.imread("img/sample.png") #读取img文件夹 sample.png图片,并命名为sample

Tips:通过“imread()”函数读取到的图像是以RGB为颜色空间的,且以BGR顺序排列。

cv2.IMREAD_COLOR:读取一副彩色图片,图片的透明度会被忽略,默认为该值,实际取值为1;
cv2.IMREAD_GRAYSCALE:以灰度模式读取一张图片,实际取值为0
cv2.IMREAD_UNCHANGED:加载一副彩色图像,透明度不会被忽略。

2、创建窗口

语法:cv2.namedWindow(winname[,flags])

其中,参数winname表示新建的窗口名称,自己随便取;

flags表示窗口的标识(一般默认为cv2.WINDOW_AUTOSIZE,表示窗口大小自动适应图片大小,并且不可手动更改; cv2.WINDOW_NORMAL表示用户可以改变这个窗口大小;cv.WINDOW_OPENGL窗口创建的时候会支持OpenGL)。

OpenCV也支持有限的界面编程,主要是针对窗口、控件和鼠标事件等,比如滑块。有了这些窗口和控件,可以更好地展现图像并调节图像的一些参数。

3、设置窗口

语法:cv2.setWindowProperty()

1 cv2.setWindowProperty('winname',cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)  # Set the windows to be full screen. 
2 # 设置窗口全屏

“cv2.WND_PROP_FULLSCREEN”指的是可以全屏的属性,“cv2.WINDOW_FULLSCREEN”指设置窗口全屏。

4、显示图像

语法:cv2.imshow(window_name,image)

window-name:显示图像的窗口的名字

image             :  要显示的图像,窗口大小自动调整为图片大小。

注意:该函数一般和cv2.waitKey()cv2.destroyAllWindows()cv2.destroyWindow()一起使用。

cv2.waitKey()函数是键盘绑定函数,等待键击任意键或指定键继续程序。

如果没有cv2.waitKey()函数,图像不会显示(也许是一闪而过,我们人眼观察不到),cv2.waitKey()函数是一个键盘绑定函数(相当于让程序在这里挂起暂停执行)

cv2.waitKey(k)

k:在时间k(单位ms)内,等待用户按键,返回按键的值,如果没有触发事件,则跳出等待。默认k=0,则无限等待按键。

cv2.destroyAllWindows()

用来销毁所有已经创建的窗口, 如果需要销毁指定窗口使用cv2.destroyWindow()函数,他接受一个表示窗口名字的名字。

cv2.destroyWindow()销毁指定窗口(从内存中清除)。

放大缩小图片的例子

1 import numpy as np               # 导入numpy模块
2 import cv2                       # 导入opencv模块
3  
4 img = cv2.imshow('car.png')       # 显示图片
5 cv2.namedWindow('image')         # 创建窗口
6 cv2.imshow('image', img)         # 显示窗口下的可调整大小的图片
7 cv2.waitKey(0)                   # 键盘绑定函数
8 cv2.destroyAllWindows()          # 销毁所有创建的窗口

 5、转化图像的色彩空间

语法:cv2.cvtColor()函数

通过“imread()”函数读取到的图像是RGB颜色空间的,并且是以BGR顺序排列的,因此,为了便于按颜色分割图像,我们需要将它转换为HSV色彩空间,这里可以通过Opencv库中的“cvtColor()”函数来实现。

1 sample = cv2.imread("img/sample.png")#读取img文件夹下sample.png图片,并命名为sample
2 hsv = cv2.cvtColor(sample,cv2.COLOR_BGR2HSV)#将图像sample转换为HSV色彩空间并命名为hsv

其中,sample指的是通过“imread()”函数读取到的以RGB为色彩空间的原图,

“cv2.COLOR_BGR2HSV”指的是色彩空间的转换方式为BGR→HSV,

 hsv是一个变量,用于存储转换后的HSV色彩空间的图片。

6、创建零矩阵

语法:numpy.zeros()

Numpy是Python中的一个科学计算库。array()函数可以用来创建一个数组(二维矩阵)

而zero()函数创建一个多维零矩阵

1 #numpy中的zero()函数可以用来创建一个多维零矩阵,使用时,我们需要先导入该库。
2 import numpy as np
3 color =  np.zeros((320, 240, 3),dtype=np.uint8) # 创建一个三维零矩阵,类型为uint8

 其中,“320”指的是第一维度,“240”指的是行数,“3”指的是列数,uint8是8位无符号整形,表示范围为[0,255]的整数,它专门用于存储各种图像的矩阵类型,要想将当前的矩阵作为图像类型来进行各种操作,就要将数据类型定义为uint8。

7、 保存图片 

语法:cv2.imwrite(filename,image[,params])

将图像保存到指定文件。filename:文件名,img:要保存的图像,params:格式特定参数编码

cv2.CV_IMWRITE_JPEG_QUALITY:设置 .jpeg/.jpg 格式的图片质量,取值为 0-100(默认值 95),数值越大则图片质量越高;
cv2.CV_IMWRITE_WEBP_QUALITY:设置 .webp 格式的图片质量,取值为 0-100;
cv2.CV_IMWRITE_PNG_COMPRESSION:设置 .png 格式图片的压缩比,取值为 0-9(默认值 3),数值越大则压缩比越大。

 8、输出图片的信息

 shape:如果是彩色图像,则返回(行数,列数,通道数)的数组;如果是灰度图像,则返回(行数,列数)的数组

 读取彩色图像的行数与列数

1 shape[0]=图像行数
2 shape[1]=图像列数
3 shape[2]=图像通道数

分别读取图片行数、列数与通道数

1 import cv2
2 import numpy as np
3 Img = cv2.imread('1.jpg',cv2.IMREAD_UNCHANGED)
4 print ('The number of lines of this image is:',Img.shape[0])
5 print ('The number of columns of this image is:',Img.shape[1])
6 print ('The number of channels of this image is:',Img.shape[2])