dasla相机二次开发C#

本人暑假期间接到一个任务,因为要完成相机图片的实时监测(通过目标检测算法实时处理),需要做一个程序将相机与算法连接。选定语言C#,因为C#做界面实在是太方便了,而且事件定义比较方便,所以选择该语言。

刚开始在网上找了很多资料,大部分无用,贴出有用的博客(https://blog.csdn.net/zxf347085420/article/details/90758099

先说一下大概实现的功能,首先连接相机后,控制相机拍照(单拍/连拍-snap/grab),通过socket通信将图片像素传给算法,这里需要预先加载模型,然后将图片传给算法,并接受算法标记结果显示。简单的说主要是获取图像-发送图像-显示的问题,其实很简单。但可能因为没有接触过,所以上手比较难。这是一篇socket博客(https://www.jianshu.com/p/269826e9e06e

还有厂家的一个SDK讲解,我会上传资源,如果没有积分可以找我。

进入相机开发过程,因为项目比较着急,所以没有采用从头开始的方法,而是使用官方案例修改,官方的demo很好,在配合开发文档(SaperaUser+sapera ++),已经实验基本的采集功能,主要接下来就是要对图像进行处理。这里重点,要知道相机都有一个回调函数xfer_XferNotify(就是每次拍照指令完成后都会自动调用回调函数),所以我们要很好的利用这个,进行保存以及处理。

我需要做的是将图像传给算法(python),开始想着保存本地,然后让算法本地读取会比减慢,以为项目要求事件在150ms,但算法处理时间需要75左右,所以一开始就放弃了这种方法,决定采用socket将图像的像素矩阵通信,但由于无论客户端(C#)发送的什么类型数据,服务器接收的都是字符流,需要转换成图像矩阵(这里耗费太多时间130ms左右,主要消耗在字符转矩阵,通信仅花费2ms,通信这个确实厉害),毫无疑问这种方法废掉。由于时间问题,决定试试本地保存,通信路径的方法,最终事实证明,这种方法可行。保存本地后在将路径发送给算法,最后返回处理后的图片路径,C#进行显示。

为了便于处理我将缓冲区复制出来处理。

SapBuffer buffer1 = new SapBuffer(1, weight, height, SapFormat.Mono8,  SapBuffer.MemoryType.ScatterGather);
bool s = buffer1.Create();
buffer1.Copy(GrabDlg.m_Buffers);

至于保存图像(如果需要将拍的图像保存),m_pathName为保存的路径,自己定义注意路径转义@

GrabDlg.m_Buffers.Save(m_PathName, "-format bmp");

 

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值