如何将PySpin与opencv python结合使用?

如何将PySpin与opencv python结合使用?,python,opencv,pyspin,Python,Opencv,Pyspin,我刚买了一台FLIR BlackFlyS USB3.0相机。我可以从相机中抓取帧,但如果不先保存它们,我就无法将该帧与opencv一起使用。有人知道如何将它们转换为在opencv中使用吗 我在互联网上搜索了包括PySpin word在内的所有内容,并找到了。 我曾尝试使用本书中提到的PySpinCapture,但无论如何我都想不出来 capture = PySpinCapture.PySpinCapture(0, roi=(0, 0, 960, 600),binningRadius=2,isMo

我刚买了一台FLIR BlackFlyS USB3.0相机。我可以从相机中抓取帧,但如果不先保存它们,我就无法将该帧与opencv一起使用。有人知道如何将它们转换为在opencv中使用吗

我在互联网上搜索了包括PySpin word在内的所有内容,并找到了。 我曾尝试使用本书中提到的PySpinCapture,但无论如何我都想不出来

capture = PySpinCapture.PySpinCapture(0, roi=(0, 0, 960, 600),binningRadius=2,isMonochrome=True)

ret, frame = capture.read()

cv2.imshow("image",frame)

cv2.waitKey(0)
我希望用户可以看到图像,但它抛出了一个错误

_PySpin.SpinnakerException: Spinnaker: GenICam::AccessException= Node is not writable. : AccessException thrown in node 'PixelFormat' while calling 'PixelFormat.SetIntValue()' (file 'EnumerationT.h', line 83) [-2006]
terminate called after throwing an instance of 'Spinnaker::Exception'

一年后,我不确定我的回答是否有帮助,但我发现您可以使用GetData函数从PySpin图像获取RGB numpy数组

因此,您可以不使用PySpinCapture模块,只需执行以下操作

import PySpin
import cv2

serial = '18475994' #Probably different for you although I also use a BlackFly USB3.0

system = PySpin.System.GetInstance()

blackFly_list = system.GetCameras()

blackFly = blackFly_list.GetBySerial(serial)

height = blackFly.Height()
width = blackFly.Width()
channels = 1

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('test_vid.avi',fourcc, blackFly.AcquisitionFrameRate(), (blackFly.Width(), blackFly.Height()), False) #The last argument should be True if you are recording in color.


blackFly.Init()
blackFly.AcquisitionMode.SetValue(PySpin.AcquisitionMode_Continuous)
blackFly.BeginAcquisition()

nFrames = 1000

for _ in range(nFrames):
    im = blackFly.GetNextImage()    

    im_cv2_format = im.GetData().reshape(height,width,channels)

    # Here I am writing the image to a Video, but once you could save the image as something and just do whatever you want with it.
    out.write(im_cv2_format)
    im.release()

out.release()    
在这个代码示例中,我想创建一个包含1000帧抓取的AVI视频文件。im.GetData返回一个1-D numpy数组,然后可以通过重塑将其转换为正确的维度。我看过一些关于使用UMat类的讨论,但在这种情况下似乎没有必要让它工作。也许这有助于提高性能,但我不确定: