上代码(实测可用)
1、原理:
为了确保每次拍摄的照片都具有唯一的编号,需要在保存照片之前找到已存在照片文件夹中最大的编号。我定义了一个名为fin_max_num()的函数来实现这个功能。该函数会遍历文件夹中的所有图片文件,并找到最大的编号。通过调用这个函数,我们可以获取最新照片的编号,并在保存照片时生成正确的文件名。
2、注意点:
获取文件夹中的所有文件名的函数中,记得要更新文件路径。我原本是放
函数体外面
,这样就导致了。只有首次
按下,它才会拍一轮照片。后面的都不拍了,因为文件夹中的文件名最大数字没有更新。
import sensor, lcd, time,image,os
from modules import ybkey
#初始化lcd模块
lcd.init()
# 初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
sensor.skip_frames()
#按键
KEY = ybkey()
# 文件夹路径,要自己修改你的路径
folder_path = "/sd/myPhotos"
# 找到最大的数
def fin_max_num():
max_num = 0
# 获取文件夹中的所有文件名,记得要更新文件名字
files = os.listdir(folder_path)
for file_name in files:
if file_name.endswith(".jpg"):
num = int(file_name.split("_")[1].split(".")[0])
if num > max_num:
max_num = num
return max_num
pre_cnt=fin_max_num() #获取当前的图片数量
while True:
# 获取当前图像,并显示在LCD上
img = sensor.snapshot()
lcd.display(img)
#按键检测,按下则为1
key_state = KEY.is_press()
if key_state == 1:
# 获取最新图片的序号
new_num = int(fin_max_num()) + 1
print("-----------the max num is {}------------".format(new_num - 1))
cnt = 0
while cnt<10:
#获取一帧图片
get_img = sensor.snapshot()
# 生成文件名
filename = folder_path + "/image_{}.jpg".format(new_num)
#文件重命名
new_num = new_num + 1
# 按新的文件名保存照片到SD卡
get_img.save(filename)
print("saved!!!")
#记录当前照片数
pre_cnt=new_num
# 在LCD上显示拍摄的照片
lcd.display(get_img)
cnt=cnt+1
print("image {} finished worked!".format(pre_cnt-1))