導(dǎo)入庫(kù)
pip install opencv-python
代碼
- 網(wǎng)絡(luò)攝像頭
'''
Opencv-python讀取IP攝像頭視頻流
pip install opencv-python
'''
import cv2
import datetime
import time
class Camera_picture:
def __init__(self):
# 攝像頭登錄賬號(hào)
self.user = "admin"
# 攝像頭登錄密碼
self.pwd = "123456"
# 攝像頭地址:端口
self.ip = "192.168.100.108:554"
# 截圖存儲(chǔ)位置
self.file_path = "./"
# 攝像頭窗口名稱
self.name = "camera"
# 連接并獲取大華攝像頭數(shù)據(jù)
def dahua(self):
# channel:通道號(hào),起始為1。例如通道2,則為channel=2
# subtype:碼流類型,主碼流為0(即subtype=0),輔碼流為1(即subtype=1)。
video_stream_path = f"rtsp://{self.user}:{self.pwd}@{self.ip}/cam/realmonitor?channel=1&subtype=0"
cap = cv2.VideoCapture(video_stream_path) # 連接攝像頭
# cap.isOpened() 判斷攝像頭是否連接成功,如果返回True則代表連接成功可以繼續(xù)操作,如果返回False則代表連接失敗
print('IP攝像頭是否開啟: {}'.format(cap.isOpened()))
return cap
def timing_screenshot(self):
'''定時(shí)截圖'''
cap = self.dahua()
if cap.isOpened(): # 連接成功
cv2.namedWindow(self.name, flags=cv2.WINDOW_FREERATIO) # 創(chuàng)建一個(gè)用于顯示畫面的窗口
last_time = datetime.datetime.now() # 記錄上一次時(shí)間
while(True):
# 逐幀捕獲,第一個(gè)參數(shù)返回一個(gè)布爾值(True/False),代表有沒有讀取到圖片;第二個(gè)參數(shù)表示截取到一幀的圖片
ret, frame = cap.read()
frame = cv2.resize(frame, (500, 300)) # 調(diào)整畫面大小
cv2.imshow(self.name, frame) # 顯示攝像頭畫面
# 定時(shí)獲取截圖
cur_time = datetime.datetime.now() # 當(dāng)前時(shí)間
name = self.file_path + str(time.time()) + ".jpg" # 路徑+名稱+格式
if (cur_time - last_time).seconds >= 10: # 如果間隔超過(guò)10秒就截圖
cv2.imwrite(name, cap.read()[1]) # 保存攝像頭畫面
last_time = cur_time
print("畫面保存成功")
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 當(dāng)一切結(jié)束后,釋放VideoCapture對(duì)象
cap.release() # 釋放攝像頭
cv2.destroyAllWindows() # 釋放所有顯示圖像窗口
else:
print("攝像頭連接失敗,請(qǐng)檢查配置")
def manual_screenshot(self):
'''手動(dòng)截圖'''
cap = self.dahua()
if cap.isOpened():
cv2.namedWindow(self.name, flags=cv2.WINDOW_FREERATIO)
while(True):
ret, frame = cap.read()
frame = cv2.resize(frame, (500, 300))
cv2.imshow(self.name, frame)
event = cv2.waitKey(1) & 0xFF # 使用變量
if event == ord('s'): # 按"S"截取圖片
name = self.file_path + str(time.time()) + ".jpg"
cv2.imwrite(name, cap.read()[1])
print("畫面保存成功")
elif event == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
else:
print("攝像頭連接失敗,請(qǐng)檢查配置")
def get_video_stream(self):
'''獲取視頻流'''
cap = self.dahua()
if cap.isOpened(): # 連接成功
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 獲取視頻的寬度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 獲取視頻的高度
fps = cap.get(cv2.CAP_PROP_FPS) # 獲取視頻的幀率
# fourcc = int(cap.get(cv2.CAP_PROP_FOURCC)) # 視頻的編碼
# FourCC 是用于指定視頻編解碼器的4字節(jié)代碼
fourcc = cv2.VideoWriter_fourcc(*"MJPG")
writer = cv2.VideoWriter(f"{self.file_path}{str(time.time())}.mp4", fourcc, fps, (width, height))
while(True):
ret, frame = cap.read()
if not ret: # 返回False退出循環(huán)
break
writer.write(frame) # 視頻保存
frame = cv2.resize(frame, (500, 300))
cv2.imshow(self.name, frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
else:
print("攝像頭連接失敗,請(qǐng)檢查配置")
if __name__ == '__main__':
run = Camera_picture()
# run.timing_screenshot()
run.get_video_stream()
# run.manual_screenshot()
- USB攝像頭
'''
Opencv-python讀取USB攝像頭視頻流
pip install opencv-python
'''
import cv2
def usb_camera():
'''usb攝像頭連接'''
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 連接攝像頭
if cap.isOpened(): # 連接成功
while(True):
ret, frame = cap.read()
# frame = cv2.flip(frame, 1) # 攝像頭是和人對(duì)立的,將圖像左右調(diào)換回來(lái)正常顯示
cv2.imshow("Usb Capture", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
else:
print("攝像頭連接失敗,請(qǐng)檢查攝像頭連接是否正常")
if __name__ == '__main__':
usb_camera()
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-527740.html
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-527740.html
到了這里,關(guān)于python_獲取網(wǎng)絡(luò)(大華)攝像頭畫面,并存儲(chǔ)為圖片和視頻的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!