Dalsa 8K彩色相机Camera link C#采图

一个采图工具,所以界面做的很简单。
private SapAcquisition m_Acquisition;
private SapBuffer m_Buffers;
private SapAcqToBuf m_Xfer;
private SapView m_View;
private SapColorConversion m_ColorConv;
private SapProcessing m_Pro;
private SapLocation m_ServerLocation;
private String m_ConfigFileName;
private String m_Executetime;
private bool m_IsSignalDetected;
private bool m_online;
public bool CreateNewObjects()
{
m_ServerLocation = new SapLocation("Xtium-CL_MX4_1", 2);//第一位是显卡名称,第二位是选择模式的第几项
m_ConfigFileName = "22N_No_Name_Default_Default.ccf";//配置文件路径
m_Acquisition = new SapAcquisition(m_ServerLocation, m_ConfigFileName);
if (SapBuffer.IsBufferTypeSupported(m_ServerLocation, SapBuffer.MemoryType.ScatterGather))
m_Buffers = new SapBufferWithTrash(2, m_Acquisition, SapBuffer.MemoryType.ScatterGather);
else
m_Buffers = new SapBufferWithTrash(2, m_Acquisition, SapBuffer.MemoryType.ScatterGatherPhysical);
m_Xfer = new SapAcqToBuf(m_Acquisition, m_Buffers);
m_ColorConv = new SapColorConversion(m_Acquisition, m_Buffers);
m_Xfer.Pairs[0].EventType = SapXferPair.XferEventType.EndOfFrame; m_Xfer.XferNotify += new SapXferNotifyHandler(xfer_XferNotify);
m_Xfer.XferNotifyContext = this; m_Pro = new SapMyProcessing(m_Buffers, m_ColorConv, new SapProcessingDoneHandler(ProCallback), this); if (!CreateObjects())
{
DestroyObjects();
DisposeObjects(); return false;
}
EnableSignalStatus();
return true;
} //这项函数官方demo是用来显示帧率的,但是我这里不需要所以就没写功能,但是要加这个函数,否则连续采集的时候就只会拍两张照片。
static void ProCallback(object sender, SapProcessingDoneEventArgs pInfo)
{
Form1 demo = pInfo.Context as Form1; }
private bool CreateObjects()
{
// Create acquisition object
if (m_Acquisition != null && !m_Acquisition.Initialized)
{
if (m_Acquisition.Create() == false)
{
DestroyObjects();
return false;
}
}
// Create buffer object
if (m_Buffers != null && !m_Buffers.Initialized)
{
if (m_Buffers.Create() == false)
{
DestroyObjects();
return false;
}
m_Buffers.Clear();
} // Create color conversion object
if (m_ColorConv != null && !m_ColorConv.Initialized)
{
if (m_ColorConv.Create() == false)
{
DestroyObjects();
return false;
}
} // Create view object
if (m_View != null && !m_View.Initialized)
{
if (m_ColorConv != null && m_ColorConv.Initialized)
{
// Set buffer to be viewed
// When using hardware color decoder, view the acquired RGB buffer,
// otherwise, for software color conversion, view the converted RGB buffer.
SapBuffer convBuffer = m_ColorConv.OutputBuffer;
if (convBuffer != null && convBuffer.Initialized)
m_View.Buffer = convBuffer;
else
m_View.Buffer = m_Buffers;
} if (m_View.Create() == false)
{
DestroyObjects();
return false;
}
}
// Create Xfer object
if (m_Xfer != null && !m_Xfer.Initialized)
{
if (m_Xfer.Create() == false)
{
DestroyObjects();
return false;
}
m_Xfer.AutoEmpty = false;
} // Create processing object
if (m_Pro != null && !m_Pro.Initialized)
{
if (!m_Pro.Create())
{
DestroyObjects();
return false;
} m_Pro.AutoEmpty = true;
}
return true; }
private void DestroyObjects()
{
if (m_Xfer != null && m_Xfer.Initialized)
m_Xfer.Destroy();
if (m_Pro != null && m_Pro.Initialized)
m_Pro.Destroy();
if (m_View != null && m_View.Initialized)
m_View.Destroy();
if (m_ColorConv != null && m_ColorConv.Initialized)
m_ColorConv.Destroy();
if (m_Buffers != null && m_Buffers.Initialized)
m_Buffers.Destroy();
if (m_Acquisition != null && m_Acquisition.Initialized)
m_Acquisition.Destroy();
}
private void DisposeObjects()
{
if (m_Xfer != null)
{ m_Xfer.Dispose(); m_Xfer = null; }
if (m_Pro != null)
{ m_Pro.Dispose(); m_Pro = null; }
if (m_View != null)
{ m_View.Dispose(); m_View = null; }
if (m_ColorConv != null)
{ m_ColorConv.Dispose(); m_ColorConv = null; }
if (m_Buffers != null)
{ m_Buffers.Dispose(); m_Buffers = null; }
if (m_Acquisition != null)
{ m_Acquisition.Dispose(); m_Acquisition = null; }
}
private void EnableSignalStatus()
{
if (m_Acquisition != null)
{
m_IsSignalDetected = (m_Acquisition.SignalStatus != SapAcquisition.AcqSignalStatus.None);
// if (m_IsSignalDetected == false)
// StatusLabelInfo.Text = "Online... No camera signal detected";
// else
// StatusLabelInfo.Text = "Online... Camera signal detected";
m_Acquisition.SignalNotifyEnable = true; }
} static void xfer_XferNotify(object sender, SapXferNotifyEventArgs argsNotify)
{
Form1 demo = argsNotify.Context as Form1;
// If grabbing in trash buffer, do not display the image, update the
// appropriate number of frames on the status bar instead
if (argsNotify.Trash)
return;
// Refresh view
else
{
demo.TakeImage();
demo.m_Pro.ExecuteNext();
}
}
private void button1_Click(object sender, EventArgs e)
{
m_Xfer.Grab();
}
private void button2_Click(object sender, EventArgs e)
{
m_Xfer.Freeze();
}
private void TakeImage()
{
try
{
SapBuffer m_pBuffer;
int m_StartFrame;
// SapBuffer.FileFormat[] m_StandardTypes;
m_pBuffer = m_Buffers;
m_StartFrame = m_pBuffer.Index; string m_Option = "-format jpeg -quality 30";
m_Buffers.Save(textBox2.Text, m_Option, m_StartFrame,0);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
关于采图,上面用的是官方的SDK方式,因为我采集的图片像素是8K*8K,原图BMP格式有256MB,压缩成30%质量的JPG也还有2.3MB左右。
还有一种方式是用Bitmap来获取图片地址,但是需要注意的一点。
IntPtr addr;
int Height = m_Buffers.Height;
int Width = m_Buffers.Width;
m_Buffers.GetAddress(out addr);
bitmap = new Bitmap(Width, Height, Width * 4, System.Drawing.Imaging.PixelFormat.Format32bppRgb, addr);
这里的宽度是*4,原因是我的BMP原图图像位深度是32位的。所以保存用Bitmap的方式需要先确定原图的位深度,否则保存图片会出现重影。
Dalsa 8K彩色相机Camera link C#采图的更多相关文章
- VisionPro连接Dalsa线扫相机
1 环境配置 硬件:编码器(提供编码信号的PLC) 线扫相机 镜头 相机线缆 图像采集卡(Dalsa_Xcelera-CL_PX4 Dual) 软件:VisionPro 8.2 VisionPro软件 ...
- 图像采集系统的Camera Link标准接口设计
高速数据采集系统可对相机采集得到的实时图像进行传输.实时处理,同时实现视频采集卡和计算机之间的通信.系统连接相机的接口用的是Camera Link接口,通过Camera Link接口把实时图像高速传输 ...
- 视频采集接口camera link 在8148中的应用
(1)应用背景 (2)camera link 简介 (3)camera link 与8148 (4)camera link 应用实例 ---------------------author:pkf - ...
- 115-基于TI TMS320DM6467无操作系统Camera Link智能图像分析平台
基于TI TMS320DM6467无操作系统Camera Link智能图像分析平台 1.板卡概述 该板卡是我公司推出的一款具有高可靠性.效率大化.无操作系统的智能视频处理卡,是机器视觉开发上的选. ...
- 115-基于TI TMS320DM6467T Camera Link 机器视觉 智能图像分析平台
基于TI TMS320DM6467无操作系统Camera Link智能图像分析平台 1.板卡概述 该板卡是我公司推出的一款具有超高可靠性.效率最大化.无操作系统的智能视频处理卡,是机器视觉开发上的首选 ...
- Hi3559AV100外接UVC/MJPEG相机实时采图设计(一):Linux USB摄像头驱动分析
下面将给出Hi3559AV100外接UVC/MJPEG相机实时采图设计的整体流程,主要实现是通过V4L2接口将UVC/MJPEG相机采集的数据送入至MPP平台,经过VDEC.VPSS.VO最后通过HD ...
- 基于Camera Link和PCIe DMA的多通道视频采集和显示系统
基于Camera Link和PCIe DMA的多通道视频采集和显示系统 在主机端PCIe驱动的控制和调度下,视频采集与显示系统可以同时完成对多个Camera Link接口视频采集以及Camera Li ...
- 10-基于TMS320C6678+XC7K325T的6U CPCI Full Camera Link图像处理平台
基于TMS320C6678+XC7K325T的6U CPCI Full Camera Link图像处理平台 1.板卡概述 板卡由我公司自主研发,基于6UCPCI架构,处理板包含一片TI DSPTMS3 ...
- 135-基于TMS320C6678、FPGA XC5VSX95T的2路Full模式Camera Link输入双目视觉处理平台
基于TMS320C6678.FPGA XC5VSX95T的2路Full模式Camera Link输入双目视觉处理平台 一.板卡概述 本板卡由我公司自主研发,基于CPCI架构,符合CPCI2.0标准,采 ...
随机推荐
- 交换机 路由器 防火墙asa 安全访问、配置 方式
这里交换机 路由器 暂时统称为 网络设备 我们一般管理网络设备采用的几种方法 一般来说,可以用5种方式来设置路由器: 1. Console口接终端或运行终端仿真软件的微机(第一次配置要使用此方式) ...
- windows服务器 IIS FTP服务
一.安装ftp,如果服务器没有,去windows组件里面装一下. 安装IIS,安装FTP(版本不同,选项不相同,这两项必选) 二.装完之后在IIS管理中心创建FTP站点 创建类型 ftp站点: ...
- Android O 8.0 奥利奥
Android O 8.0 奥利奥 1.画中画, 2.智能文本选择(Smart Text Selection), 3.notification dots, 4.自动填写(Auto-Fill) 4. ...
- C#设计模式学习笔记:(10)外观模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7772184.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第五个模式--外 ...
- nodejs爬虫--抓取CSDN某用户全部文章
最近正在学习node.js,就像搞一些东西来玩玩,于是这个简单的爬虫就诞生了. 准备工作 node.js爬虫肯定要先安装node.js环境 创建一个文件夹 在该文件夹打开命令行,执行npm init初 ...
- Everspin串口串行mram演示软件分析
Everspin在磁存储器设计,制造和交付给相关应用方面的知识和经验在半导体行业中是独一无二的.在平面内和垂直磁隧道结(MTJ)STT-MRAM位单元的开发方面处于市场领先地位.包括40nm,28nm ...
- MQ日常命令
假设队列管理器为QMgrName,以下所有使用QMgrName的地方您都可以替换成您维护的mq队列管理器名称. 一.MQ的启动与停止 用root用户启/停需要root用户包含在mqm组中. 1.MQ的 ...
- 论文阅读笔记(二十三)【ECCV2018】:Robust Anchor Embedding for Unsupervised Video Person Re-Identification in the Wild
Introduction 当前主要的非监督方法都采用相同的训练数据集,这些数据集在不同摄像头中是对称的,即不存在单个行人的错误项,这些方法将在实际场景中效果下降.在本方法中,作者引入了非对称数据,如下 ...
- OpenCV学习记录(C++版本)
HighGUI组件 图像的载入:imread()函数 Mat imread(const string& filename, int flag = 1)其中flag=1代表读入RGB彩色图像,- ...
- Dev-C++如何创建源代码模板?
Dev-C++如何创建源代码模板? 预览图片 按下Ctrl+N或者点击新建源代码,就会自动出现这些代码了 以下是操作步骤 编写你的模板 这里有我的样例: #include<iostream> ...