我正在使用ctypes访问National Instruments(NI-IMAQ)的图像获取API。在其中,有一个imgBayerColorDecode()我正在使用的imgSnap()函数,该函数用于从该函数返回的Bayer编码图像上。我想将解码后的输出(即RGB图像)与我将基于原始数据创建的一些numpy ndarray进行比较,这是imgSnap返回的内容。
但是,有两个问题。
第一个很简单:将imgSnap返回的imgbuffer传递到numpy数组中。现在首先要注意一个问题:如果您的计算机是64位的,并且具有超过3GB的RAM,则无法使用numpy创建数组并将其作为指向imgSnap的指针传递。这就是为什么您必须实施一种解决方法,在NI的论坛上进行了介绍(NI ref-前2个帖子):禁用错误消息(以下代码中的第125行:),imaq.niimaquDisable32bitPhysMemLimitEnforcement并确保创建内存的是IMAQ库图片(imaq.imgCreateBuffer)必需。在那之后,这样的食谱应该能够再次将缓冲区转换为numpy数组。但是我不确定是否对数据类型进行了正确的更改:相机具有1020x1368像素,每个像素强度的记录精度均为10位。它通过CameraLink返回图像,我假设它以每个像素2个字节的方式进行处理,以便于数据传输。这是否意味着我必须调整另一个SO问题中给出的配方:
buffer = numpy.core.multiarray.int_asbuffer(ctypes.addressof(y.contents), 8*array_length)
a = numpy.frombuffer(buffer, float)
对此:
bufsize = 1020*1368*2
buffer = numpy.core.multiarray.int_asbuffer(ctypes.addressof(y.contents), bufsize)
a = numpy.frombuffer(buffer, numpy.int16)
第二个问题是imgBayerColorDecode()没有给我期望的输出。以下是2张图片,第一张是imgSnap的输出,保存为imgSessionSaveBufferEx()。第二个是imgSnap的去马赛克化imgBayerColorDecode()之后的输出。
原始数据:i42.tinypic.com/znpr38.jpg
拜耳解码:i39.tinypic.com/n12nmq.jpg
如您所见,拜耳解码后的图像仍然是灰度图像,而且它与原始图像不一样(这里的小注释,图像已缩放以使用imagemagick上传)。原始图像是在某个蒙版之前使用红色滤色镜拍摄的。从它(和其他2个滤色器)中,我知道Bayer滤色器在左上角看起来像这样:
BGBG
GRGR
我相信我在将正确类型的指针传递给imgBayerDecode时做错了
慕村225694
相关分类