import cv2
for i in range(1,4):
img = cv2.imread(f"{i}.jpg")
height,width,channels = img.shape
print(height,width)
font = cv2.FONT_HERSHEY_SIMPLEX
# font = ImageFont.truetype("simsun.ttc", 30)
img2 = cv2.putText(img,"XIAOHAI",(300,920),font,3,(0,0,255),2,)
scale_ratio = min(1920/width,1080/height)
img3 = cv2.resize(img2,(int(width*scale_ratio*0.9),int(height*scale_ratio*0.9)) )
cv2.imshow("img2",img3)
cv2.imwrite(F"S{i}.jpg",img2)
cv2.waitKey(5000)
cv2.destroyAllWindows()
以下是对这段代码的分析:
1. 代码功能概述
这段代码主要实现了以下功能:
- 循环读取三张图片(分别名为
1.jpg
、2.jpg
、3.jpg
)。 - 获取每张图片的高度、宽度信息并打印出来。
- 在每张图片上添加文字 "XIAOHAI",设置了文字的位置、字体、字号、颜色和线条粗细等属性。
- 根据指定的比例(基于目标分辨率
1920x1080
)对添加文字后的图片进行缩放。 - 显示缩放后的图片,并将添加文字后的原始图片(未缩放前添加文字的版本)保存为新的文件(文件名分别为
S1.jpg
、S2.jpg
、S3.jpg
),每张图片显示 5 秒钟。 - 最后关闭所有打开的图像窗口。
2. 代码详细分析
这里导入了cv2
库,它是 OpenCV 库的 Python 接口,用于图像处理相关的操作。
for i in range(1, 4):
img = cv2.imread(f"{i}.jpg")
height, width, channels = img.shape
print(height, width)
-
这个循环会迭代三次,每次迭代处理一张图片。
-
cv2.imread(f"{i}.jpg")
用于读取名为i.jpg
(i
依次取值 1、2、3)的图片文件,并将其存储为img
变量(如果读取失败,img
将为None
)。 -
img.shape
可以获取图片的形状信息,返回一个包含高度、宽度和通道数的元组,这里将高度和宽度分别赋值给height
和width
,并打印出来。font = cv2.FONT_HERSHEY_SIMPLEX
img2 = cv2.putText(img, "XIAOHAI", (300, 920), font, 3, (0, 0, 255), 2) -
首先定义了字体为
cv2.FONT_HERSHEY_SIMPLEX
,这是 OpenCV 提供的一种简单字体样式。 -
然后使用
cv2.putText()
函数在图片img
上添加文字 "XIAOHAI"。参数(300, 920)
指定了文字在图片上的位置(这里是坐标形式,以图片左上角为原点),font
是前面定义的字体,3
是字体大小(缩放因子),(0, 0, 255)
是文字的颜色(这里表示红色,OpenCV 中颜色顺序是 BGR),2
是文字线条的粗细。添加文字后的图片存储为img2
。scale_ratio = min(1920 / width, 1080 / height)
img3 = cv2.resize(img2, (int(width * scale_ratio * 0.9), int(height * scale_ratio * 0.9))) -
首先计算缩放比例
scale_ratio
,它取1920 / width
和1080 / height
中的较小值,目的是确保图片在缩放后能够适应目标分辨率(这里可能是想让图片在某个显示设备上较好地展示,且可能考虑到稍微留一点边距,所以乘以了0.9
)。 -
然后使用
cv2.resize()
函数根据计算出的缩放比例对添加文字后的图片img2
进行缩放,缩放后的图片存储为img3
。cv2.imshow("img2", img3)
cv2.imwrite(F"S{i}.jpg", img2)
cv2.waitKey(5000) -
cv2.imshow("img2", img3)
用于在一个名为 "img2" 的窗口中显示缩放后的图片img3
。 -
cv2.imwrite(F"S{i}.jpg", img2)
将添加文字后的原始图片(即img2
)保存为新的文件,文件名根据循环变量i
而定,分别为S1.jpg
、S2.jpg
、S3.jpg
。 -
cv2.waitKey(5000)
让程序暂停执行,等待用户按键操作,这里等待 5000 毫秒(5 秒钟),在这期间图片会显示在窗口中,5 秒钟后继续执行下一次循环或者后续代码。cv2.destroyAllWindows()
在所有图片处理完成后,关闭所有由 cv2.imshow()
打开的图像窗口。