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

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

相关推荐
Q_Q196328847518 小时前
python+django/flask基于协同过滤算法的理财产品推荐系统
spring boot·python·django·flask·node.js·php
高洁0118 小时前
面向强化学习的状态空间建模:RSSM的介绍和PyTorch实现(3)
人工智能·python·深度学习·神经网络·transformer
aloha_78918 小时前
测试开发工程师面经准备(sxf)
java·python·leetcode·压力测试
Jonathan Star19 小时前
MediaPipe 在Python中实现人体运动识别,最常用且高效的方案是结合**姿态估计**(提取人体关键点)和**动作分类**(识别具体运动)
开发语言·python·分类
山顶听风19 小时前
分页条初始化
python
NewsMash20 小时前
PyTorch之父发离职长文,告别Meta
人工智能·pytorch·python
硅农深芯20 小时前
如何使用ptqt5实现进度条的动态显示
开发语言·python·qt
程序员杰哥20 小时前
软件测试之压力测试详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·压力测试
今天没有盐20 小时前
Pandas完全指南:从Series到DataFrame,掌握数据分析核心技能
python·pycharm·编程语言