pylon保存图片,使用basler camera和python时保存视频而不是保存图像

I'm using Basler camera and python to record some video. I can successfully capture individual frames, but I don't know how to record a video.

Following is my code:

import os

import pypylon

from imageio import imwrite

import time

start=time.time()

print('Sampling rate (Hz):')

fsamp = input()

fsamp = float(fsamp)

time_exposure = 1000000*(1/fsamp)

available_cameras = pypylon.factory.find_devices()

cam = pypylon.factory.create_device(available_cameras[0])

cam.open()

#cam.properties['AcquisitionFrameRateEnable'] = True

#cam.properties['AcquisitionFrameRate'] = 1000

cam.properties['ExposureTime'] = time_exposure

buffer = tuple(cam.grab_images(2000))

for count, image in enumerate(buffer):

filename = str('I:/Example/{}.png'.format(count))

imwrite(filename, image)

del buffer

解决方案

I haven't found a way to record a video using pypylon; it seems to be a pretty light wrapper around Pylon. However, I have found a way to save a video using imageio:

from imageio import get_writer

with get_writer('I:/output-filename.mp4', fps=fps) as writer:

# Some stuff with the frames

The above can be used with .mov, .avi, .mpg, .mpeg, .mp4, .mkv or .wmv, so long as the FFmpeg program is available. How you will install this program depends on your operating system. See this link for details on the parameters you can use.

Then, simply replace the call to imwrite with:

writer.append_data(image)

ensuring that this occurs in the with block.

An example implementation:

import os

import pypylon

from imageio import get_writer

while True:

try:

fsamp = float(input('Sampling rate (Hz): '))

break

except ValueError:

print('Invalid input.')

time_exposure = 1000000 / fsamp

available_cameras = pypylon.factory.find_devices()

cam = pypylon.factory.create_device(available_cameras[0])

cam.open()

cam.properties['ExposureTime'] = time_exposure

buffer = tuple(cam.grab_images(2000))

with get_writer(

'I:/output-filename.mkv', # mkv players often support H.264

fps=fsamp, # FPS is in units Hz; should be real-time.

codec='libx264', # When used properly, this is basically

# "PNG for video" (i.e. lossless)

quality=None, # disables variable compression

pixelformat='rgb24', # keep it as RGB colours

ffmpeg_params=[ # compatibility with older library versions

'-preset', # set to faster, veryfast, superfast, ultrafast

'fast', # for higher speed but worse compression

'-crf', # quality; set to 0 for lossless, but keep in mind

'11' # that the camera probably adds static anyway

]

) as writer:

for image in buffer:

writer.append_data(image)

del buffer

你可能感兴趣的:(pylon保存图片)