XML DOM 獲取節(jié)點值
3205
2025-04-01
前言
本文主要介紹在OpenCV用使用雙目攝像頭,包括:打開單目攝像頭、設置攝像頭參數(shù)、拍照、錄制視頻。
環(huán)境:編程語言:Python3? ? ? ? 主要依賴庫:OpenCV3.x 或?OpenCV4.x
雙目攝像頭
雙目同步攝像頭,兩個鏡頭共用一個設備ID,左右攝像機同一頻率。這款攝像頭分辨率支持2560*960或以上。
思路流程
1、由于兩個鏡頭共用一個設備ID,打開攝像頭時使用cv2.VideoCapture()函數(shù),只需打開一次。區(qū)別有的雙目攝像頭是左右鏡頭各用一個設備ID,需要打開兩次cv2.VideoCapture(0),cv2.VideoCapture(1)。
2、雙目攝像頭的總分辨率是由左右鏡頭組成的,比如:左右攝像機總分辨率1280x480;分割為左相機640x480、右相機640x480
為了方便理解畫了張草圖;圖中的“原點”是圖像像素坐標系的原點。
3、分割后,左相機的分辨率:高度 0:480、寬度 0:640
右相機的分辨率:高度 0:480、寬度 640:1280
4、轉換為代碼后
# 讀取攝像頭數(shù)據(jù)
ret, frame = camera.read()
#裁剪坐標為[y0:y1, x0:x1] HEIGHT * WIDTH
left_frame = frame[0:480, 0:640]
right_frame = frame[0:480, 640:1280]
cv2.imshow("left", left_frame)
cv2.imshow("right", right_frame)
1)分辨率1280x480
源代碼:
# -*- coding: utf-8 -*-
import cv2
import time
AUTO = False # 自動拍照,或手動按s鍵拍照
INTERVAL = 2 # 自動拍照間隔
cv2.namedWindow("left")
cv2.namedWindow("right")
camera = cv2.VideoCapture(0)
# 設置分辨率 左右攝像機同一頻率,同一設備ID;左右攝像機總分辨率1280x480;分割為兩個640x480、640x480
camera.set(cv2.CAP_PROP_FRAME_WIDTH,1280)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
counter = 0
utc = time.time()
folder = "./SaveImage/" # 拍照文件目錄
def shot(pos, frame):
global counter
path = folder + pos + "_" + str(counter) + ".jpg"
cv2.imwrite(path, frame)
print("snapshot saved into: " + path)
while True:
ret, frame = camera.read()
# 裁剪坐標為[y0:y1, x0:x1] HEIGHT*WIDTH
left_frame = frame[0:480, 0:640]
right_frame = frame[0:480, 640:1280]
cv2.imshow("left", left_frame)
cv2.imshow("right", right_frame)
now = time.time()
if AUTO and now - utc >= INTERVAL:
shot("left", left_frame)
shot("right", right_frame)
counter += 1
utc = now
key = cv2.waitKey(1)
if key == ord("q"):
break
elif key == ord("s"):
shot("left", left_frame)
shot("right", right_frame)
counter += 1
camera.release()
cv2.destroyWindow("left")
cv2.destroyWindow("right")
補充理解
OpenCV有VideoCapture()函數(shù),能用來定義“攝像頭”對象,0表示第一個攝像頭(一般是電腦內置的攝像頭);如果有兩個攝像頭,第二個攝像頭則對應VideoCapture(1)。
在while循環(huán)中使用“攝像頭對象”的read()函數(shù)一幀一幀地讀取攝像頭畫面數(shù)據(jù)。
imshow函數(shù)是顯示攝像頭的某幀畫面;cv2.waitKey(1)是等待1ms,如果期間檢測到了鍵盤輸入q,則退出while循環(huán)。
效果
2)分辨率2560x720
源代碼:
# -*- coding: utf-8 -*-
import cv2
import time
AUTO = False # 自動拍照,或手動按s鍵拍照
INTERVAL = 2 # 自動拍照間隔
cv2.namedWindow("left")
cv2.namedWindow("right")
camera = cv2.VideoCapture(0)
# 設置分辨率左右攝像機同一頻率,同一設備ID;左右攝像機總分辨率2560x720;分割為兩個1280x720
camera.set(cv2.CAP_PROP_FRAME_WIDTH,2560)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT,720)
counter = 0
utc = time.time()
folder = "./SaveImage/" # 拍照文件目錄
def shot(pos, frame):
global counter
path = folder + pos + "_" + str(counter) + ".jpg"
cv2.imwrite(path, frame)
print("snapshot saved into: " + path)
while True:
ret, frame = camera.read()
print("ret:",ret)
# 裁剪坐標為[y0:y1, x0:x1] HEIGHT * WIDTH
left_frame = frame[0:720, 0:1280]
right_frame = frame[0:720, 1280:2560]
cv2.imshow("left", left_frame)
cv2.imshow("right", right_frame)
now = time.time()
if AUTO and now - utc >= INTERVAL:
shot("left", left_frame)
shot("right", right_frame)
counter += 1
utc = now
key = cv2.waitKey(1)
if key == ord("q"):
break
elif key == ord("s"):
shot("left", left_frame)
shot("right", right_frame)
counter += 1
camera.release()
cv2.destroyWindow("left")
cv2.destroyWindow("right")
其他版本:OpenCV 雙目攝像頭拍照 C++
OpenCV Python
版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。
版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。