首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python绑定进行flycapture以检索彩色图像

使用python绑定进行flycapture以检索彩色图像
EN

Stack Overflow用户
提问于 2015-09-30 05:09:39
回答 2查看 1.6K关注 0票数 0

我正在使用PointGrey系统公司的CMLN-13S2C-CS CCD摄像头。使用FlyCapture接口进行图像抓取。我想抓取这些图片,并使用python在OpenCV中做一些事情。

我知道以下python绑定:pyflycapture2。有了这个绑定,我就能够检索图像了。但是,我不能检索彩色图像,这是相机应该能够做的。

摄像机能够处理的视频模式和帧率分别是VIDEOMODE_1280x960Y8FRAMERATE_15。我认为这与pixel_format有关,我认为应该是raw8

有没有人能够使用这个或任何现有的python绑定来检索彩色图像以用于flycapture?请注意,我正在Linux上工作。

EN

回答 2

Stack Overflow用户

发布于 2016-05-11 22:34:10

您不需要使用预定义的模式。Context类具有set_format7_configuration(mode, x_offset, y_offset, width, height, pixel_format)方法,您可以通过该方法使用自定义设置。使用此选项,您至少可以更改抓取的图像的分辨率。使用示例:

代码语言:javascript
复制
c.set_format7_configuration(fc2.MODE_0, 320, 240, 1280, 720, fc2.PIXEL_FORMAT_MONO8)

至于着色问题。到目前为止,我已经成功地使用PIXEL_FORMAT_RGB8并修改了flycapture2.pyx中的Image类获得了彩色图像,如下所示:

代码语言:javascript
复制
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安装脚本)。

票数 0
EN

Stack Overflow用户

发布于 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

代码语言:javascript
复制
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。因此,我们需要以某种方式更新该文件。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32853813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档