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() 打开的图像窗口。