python3從網(wǎng)絡(luò)攝像機解析mjpeg http流的示例
前言
網(wǎng)絡(luò)攝像頭的視頻流解析直接使用通過http的Mjpeg是具有邊界幀信息的multipart / x-mixed-replace,而jpeg數(shù)據(jù)只是以二進制形式發(fā)送。因此,實際上不需要關(guān)心HTTP協(xié)議標頭。所有jpeg幀均以marker開頭,0xff 0xd8并以結(jié)尾0xff 0xd9。因此,上面的代碼從http流中提取了此類幀,并將其一一解碼。像下面
...(http)0xff 0xd8 --|[jpeg data] |--this part is extracted and decoded0xff 0xd9 --|...(http)0xff 0xd8 --|[jpeg data] |--this part is extracted and decoded0xff 0xd9 --|...(http)
如果圖像的獲取是從tcp網(wǎng)絡(luò)中傳輸?shù)奖镜剡M行解析需要對bytes類型數(shù)據(jù)進行解碼
在使用OpenCV直接調(diào)用網(wǎng)絡(luò)攝像頭時可能會出現(xiàn)
Cam not found
這時候就需要下面這種辦法
代碼: 幀解析
import cv2cap = cv2.VideoCapture(’http://localhost:8080/frame.mjpg’) while True: ret, frame = cap.read() print(frame) if ret == True: cv2.imshow(’Video’, frame) if cv2.waitKey(1) == 27: exit(0)
視頻流解析
import cv2import requestsimport numpy as np r = requests.get(’http://192.168.1.xx/mjpeg.cgi’, auth=(’user’, ’password’), stream=True)if(r.status_code == 200): bytes = bytes() for chunk in r.iter_content(chunk_size=1024): bytes += chunk a = bytes.find(b’xffxd8’) b = bytes.find(b’xffxd9’) if a != -1 and b != -1: jpg = bytes[a:b+2] bytes = bytes[b+2:] i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR) cv2.imshow(’i’, i) if cv2.waitKey(1) == 27:exit(0)else: print('Received unexpected status code {}'.format(r.status_code))
以上就是python3從網(wǎng)絡(luò)攝像機解析mjpeg http流的示例的詳細內(nèi)容,更多關(guān)于python 解析mjpeg http流的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 基于android studio的layout的xml文件的創(chuàng)建方式2. 解決Android studio xml界面無法預(yù)覽問題3. 詳解Android studio 動態(tài)fragment的用法4. Android如何加載Base64編碼格式圖片5. 圖文詳解vue中proto文件的函數(shù)調(diào)用6. Spring Boot和Thymeleaf整合結(jié)合JPA實現(xiàn)分頁效果(實例代碼)7. 什么是python的自省8. .Net Core使用Coravel實現(xiàn)任務(wù)調(diào)度的完整步驟9. Vuex localStorage的具體使用10. Vue封裝一個TodoList的案例與瀏覽器本地緩存的應(yīng)用實現(xiàn)

網(wǎng)公網(wǎng)安備