函数的语法格式:
retval = cv2.imread(filename, [flags])
函数语法格式:
None = cv2.namedWindow(winname)
cv2.imshow(winname, Mat)
在实际使用中,可以先通过函数namedWindow创建一个窗口,再通过imshow引用该窗口来显示图像
也可以不创建窗口,直接使用imshow引用一个并不存在的窗口,显示指定图像。
retval = cv2.waitKey([delay])
retval:函数返回值,如果没有按键按下,则返回-1;如果有按键按下,则返回该按键的ASCII码。【ord(char)用来得到字符的ASCII码值】
delay表示等待键盘触发的时间,单位为ms。当delay为负数或者0时,表示无限等待,默认值为0.
None = cv2.destroyWindow(winname)
用于销毁或释放指定窗口。
None = cv2.destroyAllWindows()
用于销毁或释放所有窗口。
函数语法格式
retval = cv2.imwrite(filename, mat, [params])
params是保存类型参数,可选。常用的params就是图像压缩参数,对于JPEG和PNG图像的压缩参数如下,保存图像根据不同后缀名设置对应的压缩参数
# 取值范围:0~100,数值越小,压缩比越高,图片质量损失越严重
jpeg_params = [cv2.IMWRITE_JPEG_QUALITY, ratio] # ratio:0~100
# 取值范围:0~9,数值越小,压缩比越低,图片质量越高
png_params = [cv2.IMWRITE_PNG_COMPRESSION, ratio] # ratio: 0~9
# 保存JPEG图像
cv2.imwrite("demo.jpg", img_data, jpeg_params)
# 保存PNG图像
cv2.imwrite("demo.png", img_data, png_params)
灰度的数值区间为【0,255】,其中255表示纯白色,0表示纯黑色。
彩色图像是指图像中的每个像素都分成R、G、B三个基色分量,每个基色分量直接决定其基色的强度。
在opencv中,通道是按照B->G->R的顺序存储的。
函数cv2.split()能够拆分图像的通道。
b, g, r = cv2.split(img)
通道合并是通道拆分的逆过程,通过合并通道可以将三个通道的灰度图像构成一副彩色图像。函数cv2.merge()可以实现图像通道的合并。
b, g, r = cv2.split(img)
# 合并
bgr = cv2.merge([b, g, r])
rgb = cv2.merge([r, g, b])
import cv2
# 读取图片。
img = cv2.imread("007.jpeg")
# 转成灰度图片
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化
ret, img=cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# 显示图像
cv2.imshow("title", img)
# 进程不结束,一直保持显示状态
cv2.waitKey(0)
#销毁所有窗口
cv2.destroyAllWindows()
PIL库的安装
pip3 install pillow
PIL数据格式转OpenCV
from os import system
import cv2
from PIL import Image
import numpy as np
image = Image.open("00.jpg")
image.show()
system("pause")
img = cv2.cvtColor(np.asarray(image),cv2.COLOR_RGB2BGR)
cv2.imshow("OpenCV",img)
cv2.waitKey()
OpenCV转PIL
import cv2
from PIL import Image
import numpy
img = cv2.imread("00.jpg")
cv2.imshow("OpenCV",img)
image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
image.show()
cv2.waitKey()
PIL读取图像
from PIL import Image
image = Image.open("00.jpg")
PIL保存图像
from PIL import Image
img_data= Image.open("00.jpg")
# 保存图像
img_data.save("result.jpg")
PIL裁剪图像
from PIL import Image
im = Image.open("hopper.jpg")
# 对应裁剪位置为左上角点和右下角点
(left, upper, right, lower) = (20, 20, 100, 100)
# Here the image "im" is cropped and assigned to new variable im_crop
im_crop = im.crop((left, upper, right, lower))
对应下图,裁剪的橙色区域,(left, upper, right, lower) =(a1, b1, a2, b2)
PIL粘贴图像
使用PIL paste函数可以快速实现对图像补黑边,代码如下。
paste函数定义
Image.paste(im, box=None, mask=None)
其中im为被粘贴的图像,box为一个元组,提供两个数表示左上角,提供四个数表示左上和右下角点,None则表示(0,0)从原点开始粘贴。
from PIL import Image, ImageDraw
img_data = Image.open("test.png")
img_w, img_h = img_data.size
print(f"w {img_w} h {img_h}")
background = Image.new("RGB", (500, 500), color=(0, 0, 0))
background.paste(img_data, box=(100, 10))
background.save("result.png")
background.paste(img_data, box=(100, 200))
background.save("result.png")
本文介绍了图像的一些基本概念,并演示了opencv和PIL图像库的基本常见用法。