[踩坑记录]VS2017+大恒MER-131-210U3C相机

实验室弄了三个工业相机准备拍点数据做实验用,用的是大恒的MER-131-210U3C,官网可以查到对应的参数和详细信息。

目录

VS环境配置

C/C++ - 常规-附加包含目录,添加GalaxyIncludes.h所在的路径

链接器-常规-附加包含目录,添加GxIAPICPPEx.lib所在的目录

链接器-输入-附加依赖项,填入GxIAPICPPEx.lib

参数设置

画面闪烁:光照条件&曝光时间

画面颜色不对:Bayer图像格式


相机通过USB3.0连接后,安装启动GalaxyView,看到下面的界面:

首先怼脸的困惑就是:为什么拍摄的画面发绿?

因为没有调节白平衡,可以在右侧将自动增益自动白平衡设置为Once或者Continues,当然也可以手动调整。我一般是调整完之后将相机配置导出,这样下次直接导入配置就可以了。

VS环境配置

打开GalaxyView所在的目录,可以从目录命名发现GalaxyView是实现SDK一些功能的demo,能够直观地使用相机的各种功能。

在GalaxySDK目录下可以找到Doc和Sample

安装的GalaxyView是较早版本的,去官网的下载中心逛了逛,发现有最新版本的Galaxy_Win,想着下载看看是不是比现在的版本多一些。(Chrome点了半天下载没反应,还得换成Edge...),下载完后发现Sample里面的sln没有变过,最高还是到VS2015

手头有一份别人给的代码,看了一下是linux下C++写的,想着能用就行,看了一下写的人用的是#include<GxIAPI.h>#include <DxImageProc.h>,搜索了一下是Samples下VC SDK,我想用的是C++ SDK。不过没有关系,无非是将下面的“C++ SDK的路径和文件名”换成“VC SDK下的路径和文件名”


以下的三步参考自

C/C++ - 常规-附加包含目录,添加GalaxyIncludes.h所在的路径

我用的VC SDK,就是下面两个文件所在的路径,后面两步同理。

链接器-常规-附加包含目录,添加GxIAPICPPEx.lib所在的目录

链接器-输入-附加依赖项,填入GxIAPICPPEx.lib

然后代码里include就行了。

参数设置

画面闪烁:光照条件&曝光时间

VS运行完代码后再使用打开GalaxyView,相机会继承VS中设置的参数。跑了一下代码,发现保存下来的画面亮度变化很大,发现画面闪烁。

伤害眼睛

对比代码中参数和GalaxyView的默认参数

闪烁的问题是因为曝光时间太短,最好还是在自然光下拍摄。

网上查了一下,屋里的这种灯一般都是50Hz的?也就是说曝光时间必须是10ms=10000us的整数倍,但曝光时间越长,拍出来的运动物体也就越模糊。(再再再后来换了个场地,灯光是直流电就没有这个问题了。)

画面颜色不对:Bayer图像格式

调整曝光时间到10000后画面闪烁的问题暂时解决了,但是又遇到了新的问题:即便开启了自动增益和自动白平衡,画面中有些颜色也明显不对,比如红兔子直接变蓝兔子。把手放上都成阿凡达了

未打开自动增益和自动白平衡
打开自动增益和自动白平衡
手机拍摄画面

想起来之前看到(https://blog.csdn.net/a623406978/article/details/70174382)提了一句阵列顺序、RGB,RBG。去文档里搜索一下

在函数DxRaw8toRGB24中修改参数nBayerType

不同系统下设置不一样,原本用的是BAYERBG(Linux),挨个试,修改成BAYERRG(Window)。画面颜色就正常了...

DxRaw8toRGB24(BufferRaw, BufferRGB, Width, Height, RAW2RGB_NEIGHBOUR, DX_PIXEL_COLOR_FILTER(BAYERRG), false);


先mark一下,后面有空再说

存储图像

如何拍摄,GalaxyView插件中有连续存图工具。多个相机的话可以每个相机都开一个连续存图插件,这个插件虽然有每帧拍一张或隔多少时间拍一张的选项。但是在拍抛物时发现并不能做到每帧拍一张,最后还是用代码实现的(还有存储图像名称的自定义)。

这里放一张插件的图

连续存图插件我一般在拍相机标定用图像的时候会用到。好处就是你可以实时看到相机的画面,坏处就是我上面提到的。

多相机使用(多相机同步问题)

同步是个问题,尤其是发现手里的这款相机里面重置、锁存时间戳的功能都没有...用多线程软触发,两个相机拍的图片相差的值差不多在10ms以内,拍运动慢的物体还好说,但是如果是拍抛物线估计同步的问题就很明显了。

打算找个秒表,然后让两个相机拍摄,找到对应时间或者说时间相近的来手动同步了。(后来说10ms够了,那就不搞了)

时隔许久又在另一台笔记本上配置了一下,重新遇到一些问题,记录一下。

无法打开包括文件:“stdafx.h”:No such file or directory

项目属性->C++->预编译头->不使用预编译头

继续出现报错,将报错的include注释掉

无法从“const char [2]”转换为“char *”

stOpenParam.pszContent = "3";时出现的错误

项目属性->C/C++->语言->符合模式->

无法打开文件“GxIAPICPPEx.lib”

GxIAPICPPEx.lib所在目录如下

fatal error LNK1120: 13 个无法解析的外部命令

error LNK2019: 无法解析的外部符号 GXInitLib,该符号在函数 main 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 GXCloseLib,该符号在函数 "void __cdecl camera1(void)" (?camera1@@YAXXZ) 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 GXUpdateDeviceList,该符号在函数 main 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 GXOpenDevice,该符号在函数 "void __cdecl camera1(void)" (?camera1@@YAXXZ) 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 GXCloseDevice,该符号在函数 "void __cdecl camera1(void)" (?camera1@@YAXXZ) 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 GXGetInt,该符号在函数 "void __cdecl camera1(void)" (?camera1@@YAXXZ) 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 GXSetInt,该符号在函数 "void __cdecl camera1(void)" (?camera1@@YAXXZ) 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 GXSetFloat,该符号在函数 "void __cdecl camera1(void)" (?camera1@@YAXXZ) 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 GXSetEnum,该符号在函数 "void __cdecl camera1(void)" (?camera1@@YAXXZ) 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 GXSendCommand,该符号在函数 "void __cdecl camera1(void)" (?camera1@@YAXXZ) 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 GXRegisterCaptureCallback,该符号在函数 "void __cdecl camera1(void)" (?camera1@@YAXXZ) 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 GXUnregisterCaptureCallback,该符号在函数 "void __cdecl camera1(void)" (?camera1@@YAXXZ) 中被引用
1>MultiCam.obj : error LNK2019: 无法解析的外部符号 DxRaw8toRGB24,该符号在函数 "void __cdecl OnFrameCallbackFun1(struct GX_FRAME_CALLBACK_PARAM *)" (?OnFrameCallbackFun1@@YAXPEAUGX_FRAME_CALLBACK_PARAM@@@Z) 中被引用
1>E:\Visual Studio 2017 Project\GxCamera\x64\Debug\GxCamera.exe : fatal error LNK1120: 13 个无法解析的外部命令

 输入->附加依赖项没有添加

DxImageProc.lib
GxIAPI.lib

确定清楚自己要使用C++ SDK还是VC SDK,GxIAPICPPEx.lib是C++ SDK下的,DxImageProc.lib和GxIAPI.lib是VC SDK下的。

 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值