You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用OpenCV(Python)读取文件夹首张图片及固定基准图的代码修改

OpenCV Python 图片处理问题解答

问题1:如何使用OpenCV(Python)读取文件夹中的第一张图片?

很简单,跟着这几步来就能实现:

  1. 先导入需要的库:处理路径、批量获取文件和OpenCV功能都得靠它们:

    import os
    import glob
    import cv2
    
  2. 获取并排序图片路径glob能批量抓取文件夹里的jpg图片,但它返回的顺序不一定是文件名的自然顺序(比如frame000001.jpg可能不会默认排在最前面),所以必须手动排序:

    folder_path = "你的文件夹实际路径"  # 替换成你自己的文件夹路径
    image_paths = sorted(glob.glob(os.path.join(folder_path, '*.jpg')))
    
  3. 读取第一张图片:先确认有没有抓到图片,再用cv2.imread读取,同时处理可能的读取失败情况:

    if image_paths:
        first_image = cv2.imread(image_paths[0])
        if first_image is not None:
            print(f"成功读取第一张图片,尺寸是: {first_image.shape}")
            # 这里可以加你需要的后续处理逻辑
        else:
            print("第一张图片无法读取,可能是文件损坏或路径有误")
    else:
        print("指定文件夹里找不到jpg格式的图片哦")
    

问题2:修改代码让prev始终为文件夹中的第一张图片

看了你给的代码,问题就出在循环里的prev = curr——这行代码会让prev每次循环都变成当前的图片,自然没法固定成第一张。只需要两个小改动就能搞定:

修改后的完整代码

import os
import glob
import cv2

def cal_for_frames(video_path):
    frames = glob(os.path.join(video_path, '*.jpg'))
    frames.sort()
    # 先检查文件夹有没有图片,避免索引报错
    if not frames:
        print("文件夹里没有jpg图片")
        return []
    
    # 只初始化一次prev,固定为第一张图片
    prev = cv2.imread(frames[0])
    prev = cv2.cvtColor(prev, cv2.COLOR_BGR2GRAY)
    print(prev.dtype, prev.shape)
    
    diff = []
    # 从第二张图片开始遍历(如果需要和第一张自己比,就改成for frame_curr in frames)
    for frame_curr in frames[1:]:
        curr = cv2.imread(frame_curr)
        curr = cv2.cvtColor(curr, cv2.COLOR_BGR2GRAY)
        print(curr.dtype, curr.shape)
        tmp_diff = compute_DIFF(prev, curr)
        diff.append(tmp_diff)
        # 删掉原来的prev = curr,让prev一直保持第一张图片的状态
    
    return diff

关键修改说明

  • 固定prev的初始化:把prev的读取和格式转换放在循环外面,只执行一次,确保它永远是文件夹里的frame000001.jpg
  • 移除循环内的prev更新:删掉prev = curr这一行,这样prev就不会被后续的图片覆盖了。
  • 可选优化:循环从frames[1:]开始跳过第一张图片,因为和自己计算差异结果通常是0,没什么实际意义;如果一定要包含这一步,直接把循环改成for frame_curr in frames就行。

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

火山引擎 最新活动