【问题标题】:Controlling USB Thorlabs camera via Python - OpenCV通过 Python 控制 USB Thorlabs 相机 - OpenCV
【发布时间】:2021-02-14 06:31:18
【问题描述】:

这方面有几个主题,但其中许多都非常古老,并且没有提供真正的解决方案(或者肯定没有一个对我有用)。

我正在尝试各种库来让 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)

返回

[]

我想知道是否有人知道在过去的几年中,openCV 是否设法找到了一种读取 USB 摄像头的方法,如果是,那是什么方法? 或者任何其他可靠的方法,它允许对捕获的帧进行进一步的图像处理。

PS:我在超级用户上发布了这个,因为显然 stackoverflow 上不允许出现硬件问题,但是 suoeruser 将它迁移回这里.. 如果它在这里也偏离主题,请道歉。

【问题讨论】:

    标签: usb python opencv


    【解决方案1】:

    您可以通过本机软件与相机进行通信吗? 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

    【讨论】:

      【解决方案2】:

      试试下面的代码。它适用于我的 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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-23
        • 1970-01-01
        • 2019-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多