You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV Python实时摄像头图像保存覆盖问题求助

问题描述

我正在开展一个图像处理项目,需通过摄像头捕获实时图像并保存至指定目录。首次运行程序时图像可正常保存,但终止程序再次运行后,新捕获的图像会覆盖原有图像,导致旧图像丢失。希望实现每次运行程序都能保留所有捕获的图像。

现有代码

from tkinter import image_names
import cv2
import os 
import matplotlib.pyplot as plt

cap = cv2.VideoCapture(0)
img_counter = 0
for i in range(0, 2):
if cap.isOpened():
    ret, frame = cap.read()
    print(ret)
    print(frame)
else:
    ret = False

img1 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
plt.imshow(img1)
plt.title("Camera image 1")
img_names = "opencv_frame_{}.png".format(img_counter)
cv2.imwrite(img_names, frame)
print("Screenshot taken")
img_counter += 1

plt.xticks([])
plt.yticks([])
plt.show()
cap.release()
解决方案

问题根源在于每次程序启动时img_counter都从0开始计数,导致新生成的文件名和旧文件重复,从而覆盖旧文件。要解决这个问题,需要在程序启动时自动识别目录中已存在的图像编号,从最大编号+1开始计数:

  1. 遍历目录提取现有图像编号:
    用正则匹配筛选出符合opencv_frame_*.png格式的文件,提取文件名中的数字编号。
  2. 设置初始计数器值:
    若目录中已有这类文件,取最大编号加1作为初始img_counter;若无文件则从0开始。

修改后的代码如下:

import cv2
import os 
import matplotlib.pyplot as plt
import re

# 匹配图像文件名的正则表达式,用于提取编号
pattern = re.compile(r'^opencv_frame_(\d+)\.png$')
img_counter = 0

# 遍历当前目录,获取已存在的最大图像编号
for filename in os.listdir('.'):
    match = pattern.match(filename)
    if match:
        num = int(match.group(1))
        if num >= img_counter:
            img_counter = num + 1

cap = cv2.VideoCapture(0)

for i in range(0, 2):
    if cap.isOpened():
        ret, frame = cap.read()
        print(ret)
        print(frame)
    else:
        ret = False

    if ret:  # 确保读取到有效图像再执行后续操作
        img1 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        plt.imshow(img1)
        plt.title(f"Camera image {i+1}")
        img_name = f"opencv_frame_{img_counter}.png"
        cv2.imwrite(img_name, frame)
        print(f"Screenshot saved as {img_name}")
        img_counter += 1

plt.xticks([])
plt.yticks([])
plt.show()
cap.release()

额外优化说明

  • 增加ret判断,避免图像读取失败时触发后续报错
  • 用f-string替代format,代码更简洁直观
  • 移除无用的from tkinter import image_names导入
  • 图像标题序号改为动态生成,适配循环逻辑

内容的提问来源于stack exchange,提问作者ARKAJEET BASAK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:25:25