簡體   English   中英

通過 Python 控制 USB Thorlabs 相機 - OpenCV

[英]Controlling USB Thorlabs camera via Python - OpenCV

有幾個關於此的主題,但其中許多主題非常古老,並且沒有提供真正的解決方案(或者沒有對我有用的肯定)。

我正在嘗試各種庫來讓 Python 讀取我的 USB 相機 (DCC1545M) 的幀,它們都有各種模塊或 DLL 導入錯誤。 我正在嘗試 Instrumental、Thorcam API、py-harware、micromanager..

具體來說,我非常希望讓它與 OpenCV 一起使用,因為您以后可以在圖像上使用所有有用的計算機視覺功能,我不確定您是否可以使用其他庫。

但是,我遇到了和其他人一樣的問題,因為 openCV 首先無法讀取 USB 攝像頭。

cap = cv2.VideoCapture(1)              ## tried difference indices
  
cap.isOpened()                        ## returns FALSE
img_counter = 0
   
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

while True: 
    ret,frame = cap.read()                     ## returned frame is empty 
    cv2.imshow('preview',frame)
    k = cv2.waitKey(1)
    if k%256==32: # if SPACE is pressed, take image 
        img_name = 'frame_number_{}.png'.format(img_counter)
        cv2.imwrite(img_name,frame)
        print('frame taken ')
        img_counter += 1

cap.release()
cv2.destroyAllWindows()

我已經從 Thorlabs 網站安裝了驅動程序,並且我有 uc480_64.dll。 使用 Instrumental() 庫成功定位相機:

from instrumental import list_instruments, instrument
from ctypes import *

paramsets = list_instruments() ## camera found
print(paramsets)

返回

[<ParamSet[UC480_Camera] 序列號=b'4102675270' 型號=b'C1285R12M' id=1>]

我想知道是否有人知道在過去幾年中 openCV 是否設法找到了一種讀取 USB 攝像頭的方法,如果是這樣,那方法是什么? 或者任何其他可靠的方法,它允許對捕獲的幀進行進一步的圖像處理。

PS:我在超級用戶上發布了這個,因為顯然 stackoverflow 上不允許出現硬件問題,但是 suoeruser 將它遷移回這里 .. 如果它在這里也跑題了,我深表歉意。

您可以通過其本機軟件與相機通信嗎? https://www.thorlabs.com/software_pages/ViewSoftwarePage.cfm?Code=ThorCam

我們的實驗室正在使用“pylablib cam-control”與各種相機(包括Thorlabs USB相機)進行通信: https ://pylablib-cam-control.readthedocs.io/en/latest/

或者,如果您更喜歡編寫自己的代碼,pylablib 包含一個用於 Thorlabs USB 相機的類(實際上已經用您的特定相機進行了測試)。 https://pylablib.readthedocs.io/en/latest/devices/uc480.html#cameras-uc480

試試下面的代碼。 它適用於我的 Thorlab DCx 相機:

import cv2
import numpy as np
from instrumental.drivers.cameras import uc480

# init camera
instruments = uc480.list_instruments()
cam = uc480.UC480_Camera(instruments[0])

# params
cam.start_live_video(framerate = "10Hz")

while cam.is_open:
     
     frame = cam.grab_image(timeout='100s', copy=True, exposure_time='10ms')
     
     frame1 = np.stack((frame,) * 3,-1) #make frame as 1 channel image
     frame1 = frame1.astype(np.uint8)

     gray = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)

     #now u can apply opencv features

     cv2.imshow('Camera', gray)
     
     if cv2.waitKey(30) & 0xFF == ord('q'):
        break

cam.close()
cv2.destroyAllWindows()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM