【自动化处理】循环读取三张图片并添加文本,在线浏览和保存

复制代码
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.jpg2.jpg3.jpg)。
  • 获取每张图片的高度、宽度信息并打印出来。
  • 在每张图片上添加文字 "XIAOHAI",设置了文字的位置、字体、字号、颜色和线条粗细等属性。
  • 根据指定的比例(基于目标分辨率1920x1080)对添加文字后的图片进行缩放。
  • 显示缩放后的图片,并将添加文字后的原始图片(未缩放前添加文字的版本)保存为新的文件(文件名分别为S1.jpgS2.jpgS3.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.jpgi 依次取值 1、2、3)的图片文件,并将其存储为 img 变量(如果读取失败,img 将为 None)。

  • img.shape 可以获取图片的形状信息,返回一个包含高度、宽度和通道数的元组,这里将高度和宽度分别赋值给 heightwidth,并打印出来。

    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 / width1080 / 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.jpgS2.jpgS3.jpg

  • cv2.waitKey(5000) 让程序暂停执行,等待用户按键操作,这里等待 5000 毫秒(5 秒钟),在这期间图片会显示在窗口中,5 秒钟后继续执行下一次循环或者后续代码。

    cv2.destroyAllWindows()

在所有图片处理完成后,关闭所有由 cv2.imshow() 打开的图像窗口。

相关推荐
我不会编程555几秒前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
老歌老听老掉牙21 分钟前
平面旋转与交线投影夹角计算
python·线性代数·平面·sympy
满怀101526 分钟前
Python入门(7):模块
python
无名之逆26 分钟前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
你觉得20530 分钟前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
啊喜拔牙39 分钟前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
__lost2 小时前
Pysides6 Python3.10 Qt 画一个时钟
python·qt
誉鏐2 小时前
PyTorch复现线性模型
人工智能·pytorch·python
weixin_435208163 小时前
通过 Markdown 改进 RAG 文档处理
人工智能·python·算法·自然语言处理·面试·nlp·aigc