Opencv学习笔记(3)

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])

 9、图片缩放

语法:cv2.resize(src, dsize, dst, fx, fy, interpolation)

其中,参数含义如下:

  • src                :原始图像
  • dsize             :目标图像尺寸,输出图像
  • dst                :目标图像,可以不传入,函数会自动创建一个。
  • fx                  :沿水平方向的缩放比例
  • fy                  :沿垂直方向的缩放比例
  • interpolation :插值方法,

 

可选值包括 cv2.INTER_NEAREST  ———— 最近邻插值法
cv2.INTER_LINEAR ———— 双线性插值法(默认)
cv2.INTER_AREA ———— 基于局部像素的重采样
cv2.INTER_CUBIC ———— 基于4x4像素邻域的3次插值法
cv2.INTER_LANCZOS4 ———— 基于8x8像素邻域的Lanczos插值

 

主要事项:(1)缩放图像的方法有两种,一种是利用dsize函数,指定缩放后的图像大小,dst = cv.resize(img, (400, 300))

                            第二种是利用fx和fy,指定缩放后图像长宽相对于原图的比例,dst = cv.resize(img, (0, 0), fx=0.5, fy=0.3)

                 (2)dsize和fx/fy不能同时为0,要么你就指定好dsize的值,让fx和fy空置直接使用默认值

                           要么你就让dsize为0,指定好fx和fy的值,比如fx=fy=0.5,那么就相当于把原图两个方向缩小一倍!

                 (3)插值方法,正常情况下使用默认的双线性插值就够用了。
                          几种常用方法的效率是:最邻近插值>双线性插值>双立方插值>Lanczos插值。

10、图像裁剪

语法:image[start_row : end_row,start_col : end_col]

参数:

start_row 、end_row---图像的开始与结束的行坐标。

start_col :、end_col---图像的开始与结束的列坐标。

裁剪图像是为了从图像中删除不需要的对象或区域;也就是删除其他,保留想要的图像区域。
opencv中的图像裁剪是利用numpy数组切片的方法来实现的。首先,我们要知道图像就是一个数组,其由高、宽、通道数三个维度组成。仅对图像进行裁剪,就是意味着对宽和高两个维度进行切片操作。

 

1 # 裁剪图像
2 cropped_car = car[25:190,50:300]  # car为原图像的名字,而cropped_car是裁剪后的名字

 

 

 

 

 

 

posted @ 2023-11-30 14:33  taohuaxiaochunfeng  阅读(75)  评论(0编辑  收藏  举报