图像基本操作

2023-12-15 11:40:06
1. 读取图像

函数的语法格式:

retval = cv2.imread(filename, [flags])

flags为读取标记,用于控制读取文件的类型。
在这里插入图片描述

2. 显示图像

函数语法格式:

None = cv2.namedWindow(winname)
cv2.imshow(winname, Mat)

在实际使用中,可以先通过函数namedWindow创建一个窗口,再通过imshow引用该窗口来显示图像
也可以不创建窗口,直接使用imshow引用一个并不存在的窗口,显示指定图像。

waitKey函数
retval = cv2.waitKey([delay])

retval:函数返回值,如果没有按键按下,则返回-1;如果有按键按下,则返回该按键的ASCII码。【ord(char)用来得到字符的ASCII码值】
delay表示等待键盘触发的时间,单位为ms。当delay为负数或者0时,表示无限等待,默认值为0.

destroyWindow函数
None = cv2.destroyWindow(winname)

用于销毁或释放指定窗口。

destroyAllWindows函数
None = cv2.destroyAllWindows()

用于销毁或释放所有窗口。

3. 保存图像

函数语法格式

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)

4. 图像的基本表示方法
二值图像

二值图像是指仅仅包含黑色和白色两种颜色的图像。
在这里插入图片描述

灰度图像

灰度的数值区间为【0,255】,其中255表示纯白色,0表示纯黑色。

在这里插入图片描述

彩色图像

彩色图像是指图像中的每个像素都分成R、G、B三个基色分量,每个基色分量直接决定其基色的强度。
在这里插入图片描述

5. 通道操作

在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])
6. 图像二值化
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()
7. PIL和OpenCV图像转换

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图像库的基本常见用法。

文章来源:https://blog.csdn.net/hello_dear_you/article/details/134937102
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。