OpenCV 打開雙目攝像頭(python版)

      網(wǎng)友投稿 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]

      OpenCV 打開雙目攝像頭(python版)

      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小時內刪除侵權內容。

      上一篇:使用對象變量和With語句簡化對象的引用
      下一篇:淺談使用Docker對應用進行容器化
      相關文章
      亚洲深深色噜噜狠狠网站| 亚洲色av性色在线观无码| 亚洲天堂2016| 亚洲精品国产成人| 亚洲天天做日日做天天欢毛片| 伊人婷婷综合缴情亚洲五月| 国产亚洲精午夜久久久久久| 亚洲男人的天堂在线va拉文| 亚洲精品成a人在线观看| 亚洲免费一区二区| 国产亚洲精品无码专区| 国产福利电影一区二区三区,亚洲国模精品一区 | 精品亚洲永久免费精品| 日本红怡院亚洲红怡院最新| 亚洲AV无码一区东京热| 亚洲国产精品久久66| 亚洲一级二级三级不卡| 亚洲综合视频在线观看| 亚洲免费在线视频播放| 亚洲综合精品成人| 综合一区自拍亚洲综合图区 | 亚洲国产成人久久精品软件| 毛片亚洲AV无码精品国产午夜| 亚洲 综合 国产 欧洲 丝袜 | 亚洲国产日韩在线| 亚洲一卡2卡3卡4卡乱码 在线| 自拍日韩亚洲一区在线| 亚洲AV无码片一区二区三区| 国产亚洲精品仙踪林在线播放| ZZIJZZIJ亚洲日本少妇JIZJIZ| 亚洲精品无码午夜福利中文字幕| 亚洲va久久久噜噜噜久久男同| 久久精品国产亚洲AV香蕉| 亚洲免费观看网站| 亚洲色成人网站WWW永久四虎| 久久久亚洲精华液精华液精华液| 亚洲国产成人五月综合网| 亚洲国产三级在线观看| 亚洲国产精品热久久| 亚洲影视一区二区| 亚洲精品国产第一综合99久久|