上代码(实测可用)
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 = numreturn max_numpre_cnt=fin_max_num() #获取当前的图片数量
while True:# 获取当前图像,并显示在LCD上img = sensor.snapshot()lcd.display(img)#按键检测,按下则为1key_state = KEY.is_press()if key_state == 1:# 获取最新图片的序号new_num = int(fin_max_num()) + 1print("-----------the max num is {}------------".format(new_num - 1))cnt = 0while 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+1print("image {} finished worked!".format(pre_cnt-1))