本文介绍OpenCV基本函数库的一些调用
以下使用的cv_imgshow函数是自定义封装显示图片函数
一、OpenCV读取图片
语法:
retval = cv.imread( filename[, flags] )
filename
: 图片路径;flags
:读取图片形式,有三种读取形式。- cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1;
- cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0;
- cv2.IMREAD_UNCHANGED:用图片的原来格式打开,即以不改变图片的方式打开,图片是彩色就是彩色,图片是灰度图像就是灰度图像,可以直接写-1。
Note:注意OpenCV读取的图片的颜色通道为BGR的排列方式
cv2.imread在不加第二个参数的情况下默认将图片转换成了一个三维数组,最里面的一维代表的是一个像素的三个通道的灰度值,第二个维度代表的是第一行所有像素的灰度值,第三个维度,也就是最外面的一个维度代表的是这一张图片。
示例:
import cv2 as cv #引入库,version:4.1.2
#读取图片
img = cv.imread('cat.jpg', cv.IMREAD_COLOR) # 读取为彩色图片
img2 = cv.imread('cat.jpg', 0) #读取为灰度图片
print(img)
print(img2)
print(img.shape)
print(img2.shape)
[[[142 151 160]
[146 155 164]
[151 160 170]
...
[156 172 185]
[155 171 184]
[154 170 183]]
...
[156 169 183]
[155 168 182]
[154 167 181]]
...
[[154 178 190]
[154 178 190]
[121 145 157]
...
[183 198 200]
[128 143 145]
[127 142 144]]]
[[153 157 162 ... 174 173 172]
[119 124 129 ... 173 172 171]
[120 124 130 ... 172 171 170]
...
[187 182 167 ... 202 191 170]
[165 172 164 ... 185 141 122]
[179 179 146 ... 197 142 141]]
(414, 500, 3)
(414, 500)
二、图像显示
语法:
None = cv.imshow( winname, mat )
retval = cv.waitKey( [, delay] )
None = cv.destroyWindow( winname )
winname
:图片窗口名称;mat
:要显示的图像(imread读入的图像名)。- cv2.waitKey顾名思义等待键盘输入,单位为毫秒,即等待指定的毫秒数看是否有键盘输入,若在等待时间内按下任意键则返回按键的ASCII码,程序继续运行。若没有按下任何键,超时后返回-1。参数为0表示无限等待。不调用waitKey的话,窗口会一闪而逝,看不到显示的图片。
- cv2.destroyAllWindow()销毁所有窗口
- cv2.destroyWindow(wname)销毁指定窗口
#图片的显示,也可以创建多个窗口,
cv.imshow('cat_gray', img2)
cv.imshow('cat', img)
a = cv.waitKey(0)
cv.destroyAllWindows()
print(a)
-1
三、图片保存
语法:
retval = cv.imwrite( filename, img[, params] )
filename
:保存的文件路径名;img
:需要保存的图片;params
:可选参数,为一个列表,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3。cv2.IMWRITE_JPEG_QUALITY
类型为 long ,必须转换成 intcv2.IMWRITE_PNG_COMPRESSION
, 从0到9 压缩级别越高图像越小。
#图片的保存
cv.imwrite("cat_jpg.jpg", img, [int(cv.IMWRITE_JPEG_QUALITY), 95])
True
四、计算图片中的像素点
#计算图像中的像素点个数
img.size
621000
#像素点的类型
img.dtype
dtype(‘uint8’)
五、图像翻转
语法:
dst = cv.flip( src, flipCode[, dst] )
src
:需要翻转的图片;flipCode
:翻转的方向。flipcode
= 0:沿x轴翻转flipcode
> 0:沿y轴翻转flipcode
< 0:x,y轴同时翻转
示例:
imgflip_xy = cv.flip(img, -1)
cv_imgshow('cat_flip_xy', imgflip_xy)
六、图片复制
示例:
#图片复制
img_copy = img.copy()
cv_imgshow("cat_copy", img_copy)
七、图片颜色转换
语法:
dst = cv.cvtColor( src, code[, dst[, dstCn]] )
src
:待转换颜色的图片;code
:颜色空间转换嘛。
转化码参考官网:OpenCV
Note:将灰度图转为3通道的彩色图,实际转换之后显示仍然是灰色的,但电脑认定为彩色图3通道。
示例:
#彩色图像转为灰度图像
img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
#灰度图像转为彩色图像
#将灰度图转为3通道的彩色图,实际转换之后仍然是灰色的,电脑认定为彩色图
img_rgb = cv.cvtColor(img_gray, cv.COLOR_GRAY2RGB)
img_rgb.shape
(414, 500, 3)