我正在使用PointGrey系统公司的CMLN-13S2C-CS CCD摄像头。使用FlyCapture接口进行图像抓取。我想抓取这些图片,并使用python在OpenCV中做一些事情。
我知道以下python绑定:pyflycapture2。有了这个绑定,我就能够检索图像了。但是,我不能检索彩色图像,这是相机应该能够做的。
摄像机能够处理的视频模式和帧率分别是VIDEOMODE_1280x960Y8和FRAMERATE_15。我认为这与pixel_format有关,我认为应该是raw8。
有没有人能够使用这个或任何现有的python绑定来检索彩色图像以用于flycapture?请注意,我正在Linux上工作。
发布于 2016-05-11 22:34:10
您不需要使用预定义的模式。Context类具有set_format7_configuration(mode, x_offset, y_offset, width, height, pixel_format)方法,您可以通过该方法使用自定义设置。使用此选项,您至少可以更改抓取的图像的分辨率。使用示例:
c.set_format7_configuration(fc2.MODE_0, 320, 240, 1280, 720, fc2.PIXEL_FORMAT_MONO8)至于着色问题。到目前为止,我已经成功地使用PIXEL_FORMAT_RGB8并修改了flycapture2.pyx中的Image类获得了彩色图像,如下所示:
def __array__(self):
cdef np.ndarray r
cdef np.npy_intp shape[3] # From 2 to 3
cdef np.dtype dtype
numberofdimensions = 2 # New variable
if self.img.format == PIXEL_FORMAT_MONO8:
dtype = np.dtype("uint8")
elif self.img.format == PIXEL_FORMAT_MONO16:
dtype = np.dtype("uint16")
elif self.img.format == PIXEL_FORMAT_RGB8: # New condition
dtype = np.dtype("uint8")
numberofdimensions = 3
shape[2] = 3
else:
dtype = np.dtype("uint8")
Py_INCREF(dtype)
shape[0] = self.img.rows
shape[1] = self.img.cols
# nd value (numberofdimensions) was always 2; stride set to NULL
r = PyArray_NewFromDescr(np.ndarray, dtype,
numberofdimensions, shape, NULL,
self.img.pData, np.NPY_DEFAULT, None)
r.base = <PyObject *>self
Py_INCREF(self)
return r这段代码很可能不是完美无缺的(即我去掉了stride的东西),原因很简单,因为我几乎没有使用C和Cython的经验,但通过这种方式,我至少设法得到了一个彩色的框架(现在正在尝试让PIXEL_FORMAT_RAW8工作)。
提醒一下:flycapture2.pyx是一个Cython文件,所以在使用它之前需要重新编译它(我只是再次运行了pyflycap2安装脚本)。
发布于 2015-11-26 23:32:43
我使用与Matlab相同的摄像头,但也遇到了"raw8“格式的问题。因此,我选择了"rgb8",特别是"F7_RGB_644x482_Mode1“,所有的东西都开始工作了(不确定它应该如何看待Python)。
附注:目前我正在尝试使用Python和pyflycapture2,让我们看看我是否能找到解决办法。
更新:好的,现在我知道了。:)你的(和我的)问题原因都隐藏在pyflycapture2本身中,特别是"Image“类定义。你可以在这里看看:https://github.com/jordens/pyflycapture2/blob/eec14acd761e89d8e63a0961174e7f5900180d54/src/flycapture2.pyx
if self.img.format == PIXEL_FORMAT_MONO8:
dtype = np.dtype("uint8")
stride[1] = 1
elif self.img.format == PIXEL_FORMAT_MONO16:
dtype = np.dtype("uint16")
stride[1] = 2
else:
dtype = np.dtype("uint8")
stride[1] = self.img.stride/self.img.cols任何图像都将转换为灰度,即使它最初是RGB。因此,我们需要以某种方式更新该文件。
https://stackoverflow.com/questions/32853813
复制相似问题