1. 加載攝像頭
首先直接放上一段加載USB相機(jī)的例程供參考
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/5/16 10:22
# @Author : Chenan_Wang
# @File : cv_test.py
# @Project : pad_det
# @Software : PyCharm
import cv2 as cv
if __name__ == "__main__":
cap = cv.VideoCapture()
cap.open(1, cv.CAP_DSHOW) # 我這里0為電腦自帶攝像頭,1為外接相機(jī)
while True:
if not cap.isOpened():
print('can not open camera')
break
ret, frame = cap.read() # 讀取圖像
if not ret: # 圖像讀取失敗則直接進(jìn)入下一次循環(huán)
continue
cv.namedWindow("cv_test")
cv.imshow('cv_test', frame)
my_key = cv.waitKey(1)
# 按q退出循環(huán),0xFF是為了排除一些功能鍵對(duì)q的ASCII碼的影響
if my_key & 0xFF == ord('q'):
break
#釋放資源
cap.release()
cv.destroyAllWindows()
2. 高分辨率視頻流延遲問題
攝像頭成功加載出來,但是默認(rèn)分辨率太低(我的相機(jī)支持的是1080p),通過如下代碼設(shè)置分辨率和幀率:
cap.set(cv.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv.CAP_PROP_FPS, 30)
此時(shí)分辨率是1080p了,但是延遲嚴(yán)重,在網(wǎng)上找了一堆方法,幾乎都不可用?。?!:
- 設(shè)置格式為MJPG:
cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter_fourcc('M', 'J', 'P', 'G'))
==> 無法解決問題,依然有延遲
-
開啟多線程接受圖像信息,依然無法解決問題,延遲依舊
-
發(fā)現(xiàn)修改為低分辨率的時(shí)候卡頓會(huì)降低,推測(cè)可能是由于分辨率太高導(dǎo)致的延遲現(xiàn)象,但是理論上來說這點(diǎn)算力對(duì)計(jì)算機(jī)是沒影響的,結(jié)果在修改分辨率的時(shí)候突然問題就解決了 ↓
3. 延遲解決方案
設(shè)置分辨率的時(shí)候不要設(shè)置為1920x1080,改成1900x1080!,實(shí)際成像依然會(huì)匹配相機(jī)的1920x1080,保存的時(shí)候也是1920x1080
而且畫面會(huì)和之前cv默認(rèn)分辨率的幀率一樣,及其流暢,幾乎無延遲
具體啥愿意就不知道了,希望有大佬可以解答一下~文章來源:http://www.zghlxwxcb.cn/news/detail-484569.html
下面放上完整代碼供參考:文章來源地址http://www.zghlxwxcb.cn/news/detail-484569.html
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/5/16 10:22
# @Author : Chenan_Wang
# @File : cv_test.py
# @Project : pad_det
# @Software : PyCharm
import cv2 as cv
if __name__ == "__main__":
cap = cv.VideoCapture()
cap.open(1, cv.CAP_DSHOW) # 我這里0為電腦自帶攝像頭,1為外接相機(jī)
cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter_fourcc('M', 'J', 'P', 'G'))
cap.set(cv.CAP_PROP_FRAME_WIDTH, 1900) # 解決問題的關(guān)鍵!??!
cap.set(cv.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv.CAP_PROP_FPS, 30)
while True:
if not cap.isOpened():
print('can not open camera')
break
ret, frame = cap.read() # 讀取圖像
if not ret: # 圖像讀取失敗則直接進(jìn)入下一次循環(huán)
continue
cv.namedWindow("cv_test")
cv.imshow('cv_test', frame)
my_key = cv.waitKey(1)
# 按q退出循環(huán),0xFF是為了排除一些功能鍵對(duì)q的ASCII碼的影響
if my_key & 0xFF == ord('q'):
break
#釋放資源
cap.release()
cv.destroyAllWindows()
到了這里,關(guān)于OpenCV調(diào)用USB攝像頭/相機(jī),并解決1080p下的延遲卡頓問題(附Python代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!