首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过python uEye在入侵检测系统摄像头上配置Mono12模式

通过python uEye在入侵检测系统摄像头上配置Mono12模式
EN

Stack Overflow用户
提问于 2020-08-21 00:31:49
回答 2查看 521关注 0票数 0

有人知道如何在入侵检测系统摄像头上正确配置Mono12模式吗?

我尝试过is_SetColorMode方法,将每像素的字节数设置为12,将每像素的字节数设置为2,依此类推。它的效果不是很好。

最后,我在IDS中创建了一个配置文件,并保存了它,现在我在uEye代码的开头使用来设置摄像头。这也无济于事。

我现在遇到的问题是,我得到的图像是在~2056*2056 (芯片大小)的两个数组中引入的。这是因为我每个像素有2个字节。但我不知道如何正确地将其转换为普通图像。

此外,即使在默认的Mono8模式下,我看到的图片也与我在IDS应用程序中看到的不同。

下面是代码(我也可以给出配置文件):

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
import numpy as np
import cv2
import sys
import pyueye.ueye as ueye
import time

hCam = ueye.HIDS(0)
# Starts the driver and establishes the connection to the camera
nRet = ueye.is_InitCamera(hCam, None)
if nRet != ueye.IS_SUCCESS:
    print("is_InitCamera ERROR")

conf_file = 'camera_config_mono12.ini'

nRet = ueye.is_ParameterSet(hCam,
                            ueye.INT(2),
                            ueye.wchar_p(conf_file),
                            ueye.sizeof(ueye.INT(2)))
print(str(nRet) + ' - ParameterSet')

nRet = ueye.is_SetColorMode(hCam, ueye.IS_CM_MONO12)
print(str(nRet) + ' - SetColorMode')
BitesPerPix = ueye.INT(12)
BytesPerPixel = 2

nRet = ueye.is_SetDisplayMode(hCam, ueye.INT(1))
print(str(nRet) + ' - SetDisplayMode')

nRet = ueye.is_SetFrameRate(hCam, ueye.c_double(1), ueye.c_double())
print(str(nRet) + ' - SetFrameRate')

exp_time = ueye.c_void_p(200)
nRet = ueye.is_Exposure(hCam, ueye.INT(12), exp_time, 8)
print(str(nRet) + ' - Exposure')

rectAOI = ueye.IS_RECT()
nRet = ueye.is_AOI(hCam, ueye.INT(2), rectAOI, ueye.sizeof(rectAOI))
print(str(nRet) + ' - AOI')

save_file = 'C:\\Users\\novoks\\Desktop\\emva_tests\\ids\\saved_conf.ini'
nRet = ueye.is_ParameterSet(hCam,
                            ueye.INT(4),
                            ueye.wchar_p(save_file),
                            ueye.sizeof(ueye.INT(4)))

pcImageMem = ueye.c_mem_p()
pid = ueye.c_int()
nRet = ueye.is_AllocImageMem(hCam,
                             rectAOI.s32Width,
                             rectAOI.s32Height,
                             BitesPerPix,
                             pcImageMem,
                             pid)
print(str(nRet) + ' - AllocImageMem')

nRet = ueye.is_SetImageMem(hCam, pcImageMem, pid)
print(str(nRet) + ' - SetImageMem')

nRet = ueye.is_CaptureVideo(hCam, ueye.IS_DONT_WAIT)
print(str(nRet) + ' - CaptureVideo')

time.sleep(1)

#nRet = ueye.is_FreezeVideo(hCam, ueye.INT(0))
#print(str(nRet) + ' - FreezeVideo')

bts = ueye.INT()
pitch = ueye.INT()
nRet = ueye.is_InquireImageMem(hCam,
                               pcImageMem,
                               pid,
                               ueye.INT(),
                               ueye.INT(),
                               bts,
                               pitch)
print(str(nRet) + ' - InquireImageMem')

array = ueye.get_data(pcImageMem,
                      rectAOI.s32Width,
                      rectAOI.s32Height,
                      BitesPerPix,
                      pitch,
                      copy=False)
print(str(nRet) + ' - get_data')

pict = np.reshape(array,
                  (rectAOI.s32Height.value,
                   rectAOI.s32Width.value,
                   BytesPerPixel))

plt.figure(figsize=[12,5])

plt.subplot(1,3,1)
plt.imshow(pict[:,:,0])

plt.subplot(1,3,2)
plt.imshow(pict[:,:,1])

plt.subplot(1,3,3)
plt.imshow(pict[:,:,0] + pict[:,:,1])

plt.show()

nRet = ueye.is_ExitCamera(hCam)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-16 16:35:48

您必须使用16位/像素而不是12位/像素,因为Mono12不是压缩格式。看一看手册页面“颜色和内存格式”。在MONO12颜色模式下,它显示为16位。

票数 0
EN

Stack Overflow用户

发布于 2020-11-14 12:52:26

尝试使用ueye.is_PixelClock()命令减少像素时钟。当我使用pixelclock= 35 (我的UI-3240的最大可用速度)尝试RAW12时,图像采集命令没有返回任何(0) --就像您的情况一样。

但是,一旦我的速度降到10 But,图像数据就会正常返回。

IDS Camera Manager也可以检查图像格式与像素时钟之间的关系。当您将格式从Mono8(默认)切换到Raw12时,程序会立即显示错误消息。

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

https://stackoverflow.com/questions/63509438

复制
相关文章

相似问题

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