【问题标题】:How to read the first image in folder using opencv (python)如何使用opencv(python)读取文件夹中的第一张图像
【发布时间】:2020-10-30 15:51:37
【问题描述】:

我正在使用以下代码来读取和计算文件夹中连续图像之间的差异:

def cal_for_frames(video_path):
    frames = glob(os.path.join(video_path, '*.jpg'))
    frames.sort()


    diff = []
    prev = cv2.imread(frames[0])
    prev = cv2.cvtColor(prev, cv2.COLOR_BGR2GRAY)
    print(prev.dtype, prev.shape)
    for i, frame_curr in enumerate(frames):
        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
    
    return diff

现在我希望我的prev 始终是文件夹中的第一个图像(即保持不变)。我需要对prev = cv2.imread(frames[0]) 进行哪些更改才能执行此操作?其中frame000001 是文件夹中的第一张图片。

【问题讨论】:

    标签: python-3.x opencv image-processing glob imread


    【解决方案1】:

    只需删除for-loop 的最后一行:prev = currprev = cv2.imread(frames[0])

    但是你可以加快你的for-loop。如果print 功能不重要,那么你可以这样做:

    diff = [compute_DIFF(prev, cv2.cvtColor(cv2.imread(frame_curr), cv2.COLOR_BGR2GRAY)) for i, frame_curr in enumerate(frames)]
    

    代码:


    def cal_for_frames(video_path):
        frames = glob(os.path.join(video_path, '*.jpg')).sort()
        prev = cv2.cvtColor(cv2.imread(frames[0]), cv2.COLOR_BGR2GRAY)
        print(prev.dtype, prev.shape)
    
        diff = [compute_DIFF(prev, cv2.cvtColor(cv2.imread(frame_curr), cv2.COLOR_BGR2GRAY)) for i, frame_curr in enumerate(frames)]
    
        return diff
    

    【讨论】:

    • 谢谢!删除prev=curr 就成功了。还有一个问题,我正在尝试使用"frame{%06d}.jpg".format(i) 保存图像,但我得到了KeyError: '%06d'。当我使用"frame{}.jpg".format(i) 时它工作正常,我想知道我做错了什么,谢谢。
    • 过去使用"frame{%06d}.jpg".format(i) 有效,不知道为什么现在无效。
    • 我让它工作了。我将"frame{%06d}.jpg".format(i) 更改为"frame{:06d}.jpg".format(i)。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2022-07-01
    • 2023-01-02
    • 2013-05-18
    • 2017-11-23
    相关资源
    最近更新 更多