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

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

相关推荐
懒大王爱吃狼20 分钟前
Python绘制数据地图-MovingPandas
开发语言·python·信息可视化·python基础·python学习
数据小小爬虫23 分钟前
如何使用Python爬虫按关键字搜索AliExpress商品:代码示例与实践指南
开发语言·爬虫·python
martian6651 小时前
第17篇:python进阶:详解数据分析与处理
开发语言·python
无码不欢的我1 小时前
使用vscode在本地和远程服务器端运行和调试Python程序的方法总结
ide·vscode·python
五味香1 小时前
Java学习,查找List最大最小值
android·java·开发语言·python·学习·golang·kotlin
金融OG1 小时前
99.8 金融难点通俗解释:净资产收益率(ROE)
大数据·python·线性代数·机器学习·数学建模·金融·矩阵
fmdpenny1 小时前
Django的安装
后端·python·django
小爬菜1 小时前
Django学习笔记(启动项目)-03
前端·笔记·python·学习·django
陈钇钇2 小时前
持续升级《在线写python》小程序的功能,文章页增加一键复制功能,并自动去掉html标签
python·小程序·html