微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

优化电影条码

如何解决优化电影条码

在 reddit 上看到一些东西后,我最近一直在研究电影条形码生成器。我不熟悉在 python 中处理图像和视频,所以请原谅我的代码中的任何愚蠢的错误。我面临的问题是我的代码需要与电影的运行时间一样长才能生成条形码。据我所知,代码非常简单,遍历电影的每一帧,取中间列的像素并将其附加到最终图像上。

我这样做是为了在代码运行时,我们可以像进度条一样看到最终产品的制作。

由于我也想为其他电影制作这些条形码,我想知道是否可以使此代码更高效。我不想每次决定做条码都要等 2 个小时,我认为这会是一个有趣的代码优化练习。

我认为它这么慢的原因是当我调用 cap.read() 时,CV2 必须解码每一帧。有没有办法绕过它?这样我只会解码我为最终图像采样的帧。我也尝试过实现某种并行处理,但我对此一无所知,而且在线复制代码并不顺利。

完整代码如下:

import numpy as np
from os import system

cap = cv2.VideoCapture("PATH OF MOVIE")
width_center = int((cap.get(cv2.CAP_PROP_FRAME_WIDTH)/2))
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
img = np.zeros((int(height),1,3),np.uint8)
frame_count = 0

try:
    total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
except:
    total_frames = 1
    print("Frames percentage is broken,unable to get total frame count")

while(1):
    ret,frame = cap.read()

    if cv2.waitKey(1) & 0xFF == ord('q') or ret==False :
        cap.release()
        cv2.destroyAllWindows()
        break

    if frame_count % int(total_frames/2000) == 0:
        img = cv2.hconcat([img,cv2.resize(frame,(1,int(height)))])
        if int(frame_count/total_frames*100) != int((frame_count-1)/total_frames*100):
            print(str(int(frame_count/total_frames*100))+" % Done!")

    cv2.imshow('frame',img)

    frame_count += 1

cv2.imwrite("PATH OF IMAGE",img)
print("Image created!")

提前感谢您的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。