如何用OpenCV(Python)读取文件夹首张图片及固定基准图的代码修改
OpenCV Python 图片处理问题解答
问题1:如何使用OpenCV(Python)读取文件夹中的第一张图片?
很简单,跟着这几步来就能实现:
先导入需要的库:处理路径、批量获取文件和OpenCV功能都得靠它们:
import os import glob import cv2获取并排序图片路径:
glob能批量抓取文件夹里的jpg图片,但它返回的顺序不一定是文件名的自然顺序(比如frame000001.jpg可能不会默认排在最前面),所以必须手动排序:folder_path = "你的文件夹实际路径" # 替换成你自己的文件夹路径 image_paths = sorted(glob.glob(os.path.join(folder_path, '*.jpg')))读取第一张图片:先确认有没有抓到图片,再用
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




