Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 优化电影条码_Python_Python 3.x_Opencv_Image Processing_Video - Fatal编程技术网

Python 优化电影条码

Python 优化电影条码,python,python-3.x,opencv,image-processing,video,Python,Python 3.x,Opencv,Image Processing,Video,在reddit上看到一些东西后,我最近一直在制作电影条形码生成器。我不熟悉python中的图像和视频,所以请原谅我代码中的任何愚蠢错误。我面临的问题是,我的代码需要与电影运行时一样长的时间来生成条形码。据我所知,代码非常简单,遍历电影的每一帧,取中间的像素列并将其附加到最终图像上 我这样做是为了在代码运行时,我们可以看到最终产品像进度条一样被制作出来 由于我也想为其他电影制作这些条形码,我想知道是否有可能使这些代码更有效。我不想每次决定制作条形码都要等2个小时,我认为这将是优化代码的一个有趣的练

在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!")
提前谢谢你的帮助