亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將yuv420p原始數據轉換為opencv圖像

將yuv420p原始數據轉換為opencv圖像

HUWWW 2023-12-12 20:32:50
我有來自 rtmp 服務器的原始數據,像素格式為 yuv420p我使用管道來讀取數據。但我不知道如何將原始數據解碼為圖像。command = ['ffmpeg']command.extend(["-loglevel", "fatal", "-i", 'rtmp://localhost/live/stream', "-f", "flv", "-pix_fmt" , 'yuv420p', '-vcodec', 'h264', "-"])self.process = subprocess.Popen(command, stderr=subprocess.PIPE ,stdout = subprocess.PIPE)self.output = self.process.stdoutself.fs = width*height*3 // 2while True:    data = self.output.read(self.fs)我嘗試像這樣解碼,在此處輸入鏈接描述但結果是在此處輸入圖像描述誰能幫我解決這個問題嗎?
查看完整描述

1 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

我不是這方面的專家ffmpeg,所以我會聽從任何更了解的人的意見,如果證明不正確,我會刪除我的答案。


據我所知,您有一個想要攝取到 OpenCV 中的 RTMP 流。OpenCV 使用具有 BGR 排序的 Numpy 數組來存儲圖像 - 顯然還有視頻幀,這些圖像只是一個接一個的大量圖像。因此,我建議您要求ffmpeg將 Flash 視頻流轉換為 OpenCV 想要的格式:


ffmpeg <RTMP INPUT STUFF> -pix_fmt bgr24 -f rawvideo -

然后更改它,因為它現在是 BGR888:


self.fs = width * height * 3

由于我沒有可用的 RTMP 源,因此我生成了如下測試流:


# Generate raw video stream to read into OpenCV? ??

ffmpeg -f lavfi -i testsrc=duration=10:size=640x480:rate=30 -pixel_format rgb24 -f rawvideo -

然后我將其通過管道傳輸到 Python 中:


ffmpeg -f lavfi -i testsrc=duration=10:size=640x480:rate=30 -pixel_format rgb24 -f rawvideo - | ./PlayRawVideo

Python 程序PlayRawVideo如下所示:


#!/usr/bin/env python3


import numpy as np

import cv2

import sys


# Set width and height

w, h = 640, 480


while True:

? ? data = sys.stdin.buffer.read(w * h *3)

? ? if len(data) == 0:

? ? ? ? break

? ? frame = np.frombuffer(data, dtype=np.uint8).reshape((h, w, 3))

? ? cv2.imshow("Stream", frame)

? ? cv2.waitKey(1)

? ??

請注意,我必須使用它sys.stdin.buffer.read()來獲取原始二進制數據。


查看完整回答
反對 回復 2023-12-12
  • 1 回答
  • 0 關注
  • 265 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號