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

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

相关推荐
网易独家音乐人Mike Zhou3 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书3 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
小二·5 小时前
java基础面试题笔记(基础篇)
java·笔记·python
小喵要摸鱼6 小时前
Python 神经网络项目常用语法
python
一念之坤7 小时前
零基础学Python之数据结构 -- 01篇
数据结构·python
wxl7812278 小时前
如何使用本地大模型做数据分析
python·数据挖掘·数据分析·代码解释器
NoneCoder8 小时前
Python入门(12)--数据处理
开发语言·python
LKID体9 小时前
Python操作neo4j库py2neo使用(一)
python·oracle·neo4j
小尤笔记9 小时前
利用Python编写简单登录系统
开发语言·python·数据分析·python基础
FreedomLeo19 小时前
Python数据分析NumPy和pandas(四十、Python 中的建模库statsmodels 和 scikit-learn)
python·机器学习·数据分析·scikit-learn·statsmodels·numpy和pandas