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

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

相关推荐
吃饱了得干活26 分钟前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
ikun_文29 分钟前
Python进阶—函数编程
python·pycharm
MC皮蛋侠客33 分钟前
uv 系列(三):依赖、锁文件与环境同步——可重复构建的核心
python·uv
量化吞吐机36 分钟前
2026年交易想法转Python,中间先补规则转译
人工智能·python
用户2986985301438 分钟前
Python 实现 Excel 与 Markdown 互转的实用指南
后端·python·excel
决战灬42 分钟前
langgraph之interrupt(事例篇)
人工智能·python·agent
IPdodo_1 小时前
Codex 总是 Reconnecting?从 401 到响应流中断的排查方法
python·requests
京和动物医院·总院1 小时前
2026年未央区宠物医院:如何挑选最适合您爱宠的健康守护者
大数据·人工智能·python
刘小八1 小时前
RAG 文档切分不是越细越好:选择 Chunk Size 与 Overlap
人工智能·python·语言模型
互联网中的一颗神经元1 小时前
小白python入门 - 23. Python 正则表达式的应用
python·正则表达式