簡體   English   中英

Opencv錄制的視頻太慢並且相機更新非常慢

[英]Opencv recorded video is too slow and camera update is very slow

請幫助我理解為什么使用Opencv錄制的視頻這么慢。 它不能反映快速移動。 例如,如果我移動相機,則視頻中的移動速度太慢。 另外,盡管我在相機前面顯示了一張圖片約2秒鍾,但在錄制中卻看不到該圖片。

有人可以向我解釋一下這是怎么回事。 這是我的簡單代碼:

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output2.avi',fourcc, 30.0, (640,480))

while (True):

    camera.capture(stream, use_video_port=True, format='jpeg') 
    stream.seek(0)
    imageData = np.fromstring(stream.getvalue(), dtype=np.uint8)
    npImage = cv2.imdecode(imageData, 1) 
    out.write(npImage)
    stream.close()

我不確定這是否可以解決您的問題。 您可以定義一個單獨的函數,該函數從攝像機獲取幀並將其放入隊列。 您可以在單獨的線程中運行此功能。 請參閱此鏈接以獲取有關線程的文檔。 因為cap.read()函數是一個阻止函數(如果您使用cap = cv2.VideoCapture()),這將加快從攝像機獲取幀的過程。

該代碼將是這樣的。

def getf(queue):
    cap = cv2.VideoCapture(0)    
    while(processing):
        fr = {}
        ret, a = cap.read()
        if ret:
            fr["imagecaptured"]=a
            queue.put(fr)
        else:
            #whatever you want to do when a frame is unable to be read from cam
    cap.release()

stream = threading.Thread(target=getf, args=queue)

請注意,以上代碼示例中的“處理”是一個全局變量。 現在,您可以定義一個函數來將處理設置為true,然后使用“ stream.start()”命令啟動線程,或者將其直接放入程序中。

線程啟動后,幀將連續放入隊列中,以供您在需要時讀取。 使用下面的代碼,您將獲得框架。

if not queue.empty():
    capturedframe = queue.get()
    frame = capturedframe["imagecaptured"]

我使用此方法從相機流式傳輸並同時執行其他操作。 從使用pyqt制作網絡攝像頭小部件的鏈接中引用。 請注意,上面的代碼段僅作為示例,不能閱讀以運行。 除了定義,我建議您還包括一個條件,以保持檢查隊列大小。 現在,您可以對其進行修改以用於您的應用程序,並查看它是否可以完成工作。 您也可以參考此鏈接以獲取類似示例。

在python中運行多個線程當然是一個不錯的建議,但是您會發現大多數實時視頻程序都是用C ++等編譯語言編寫的,可能會附帶一些匯編程序/ sse印章.....我什至不會解決GPU加速問題。 如果您在python中運行多個線程,則可能會將問題轉換為其他某種形式的死亡,因為隊列填充的速度比清空隊列的速度快,並且如果視頻不斷流進來,最終將耗盡內存。方法是使用優化的程序包來獲取,廣播和錄制視頻-例如,在我在github上的公共項目中,我有Dantalion,它是C ++客戶端,可以處理實時獲取和某些圖像處理任務,例如校正和視差calcs-它還將圖像泵送到MQTT服務器,在這里,采用TOO D ** N LONG的python DantalionClient應用程序:-(可以執行諸如搜索棋盤,計算內在函數和外部函數之類的操作。我還選擇在因為Dantalion主機是SoC(Beaglebone),所以我強烈建議您加載武器庫; Python是我最好的朋友之一,但是如果我關心速度和比特流,並且您不會讓我做很多代數 RA,C ++是我選擇的工具。 Python不是簡單地從a點到b點獲取大量原始圖像的正確工具。 不要誤會我的意思-我不推薦我的東西-太專業了-我只是以它為例來說明為什么您想考慮其他語言/工具鏈-存在它們是有原因的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM