使用统一的接口操作各种厂家的相机。相机操作主要包括拍照采图,设置相机成像参数,设置子窗口大小,实时播放图像。
相机拍照之前必须保证相机成功打开。相机拍照通常在启动抓图后进行拍照,如:
bool ret = global.camera.Start(Camera.TRIG_SOFT);
RvImage im = new RvImage();
int w = 120;
int h = 129;
int dep = 8;
global.camera.GetDepth(out dep);
global.camera.GetWidth(out w);
global.camera.GetHeight(out h);
im.Create(RvImage.RIT_RGB, w, h);
global.Assert(global.camera.IsOpened(), "相机没有打开");
if (global.camera.FetchImage(im.GetHandle(), 1200)){
// to do something
}
im.Destroy();
global.camera.Stop();
也可以在不启动状态下进行拍照。
相机按照参数名称设置参数值。所有的参数值数据类型为整数。
如:
global.camera.SetParam("exposure", 1200);
该语句设置曝光时间为1200。
在设置参数之前也可以通过下面的函数获得相应参数值支持的范围。
global.camera.GetParamMin("exposure", out min_v)
global.camera.GetParamMax("exposure", out max_v);
获得相机的实际参数值,如下:
global.camera.GetParam("exposure", out n );
常用成像参数名称
名称 | 说明 |
---|---|
exposure | 曝光时间 |
gain | 增益 |
bright | 亮度(黑白相机) |
contrast | 对比度(彩色相机) |
width | 宽度 |
height | 高度 |
int offsX = 100;
int offsY = 80;
int w = 500;
int h =480;bool ret = global.camera.SetRoi(offsX, offsY, w, h);
以在form显示相机采集的实时图像为例,说明使用回调函数接收相机图像的过程。
回调函数接收图像需要定义delegate函数。如下:
public delegate void FrameArrivalDelegate(IntPtr hCamera, IntPtr pData, UInt64 size, IntPtr pUserData);
定义一个与代理函数参数和返回值一样的实现函数,如下:
public static void FrameArrivalFunc(IntPtr hCamera, IntPtr pData, UInt64 size, IntPtr pUserData)
{
FormPcbSight fps = (FormPcbSight)Form.FromHandle(pUserData);
//显示到RealView控件中
m_sightView.FeedData(pData, size, false);
}
然后声明一个生命周期在整个采集图像期间有效的delegate函数变量。
FrameArrivalDelegate m_faDelegate = new FrameArrivalDelegate(FrameArrivalFunc);
调用相机函数设置回调delegate函数对象。global.camera.SetFrameArrivalCallback(m_faDelegate, this.Handle);
使用下面函数启动相机。bool ret = global.camera.Start(Camera.TRIG_NONE);
在计时器时间里面调用下面语句,刷新图像:m_sightView.Refresh(RealView.UPDATE);
抖音视频号: 第一感机器视觉
微信公众号: 精浦科技
深圳市软云动力科技有限公司
东莞办事处: 广东省东莞市松湖智谷B6栋225b
公司地址: 广东省深圳市南山区桃园路金桃园大厦2191
深圳市软云动力科技有限公司 版权所有 鄂ICP备2022015826号-2