如何将PySpin与opencv python结合使用?
我刚买了一台FLIR BlackFlyS USB3.0相机。我可以从相机中抓取帧,但如果不先保存它们,我就无法将该帧与opencv一起使用。有人知道如何将它们转换为在opencv中使用吗 我在互联网上搜索了包括PySpin word在内的所有内容,并找到了。 我曾尝试使用本书中提到的PySpinCapture,但无论如何我都想不出来如何将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
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类的讨论,但在这种情况下似乎没有必要让它工作。也许这有助于提高性能,但我不确定: