扛水泥的技法与实践-----《相机篇2》

来源:互联网 发布:单片机lcd显示原理 编辑:程序博客网 时间:2024/04/28 09:36

一、相机的采集
映美精相机采集以及转换主要由事件

icImagingControl1_ImageAvailable(object sender, TIS.Imaging.ICImagingControl.ImageAvailableEventArgs e)

产生当前缓存,并由halcon的算子genimage1()完成相机数据到halcon数据的转换。
代码如下:
1、添加控件的事件

ICIamgControl.ImageAvailable+=icImagingControl1_ImageAvailable;

对于此事件官方说明:
Set LiveCaptureContinuous in the property browser to True, in order to enable the continuous capture mode. In this mode, IC Imaging Control copies every frame automatically to the ring buffer. In addition, an ImageAvailable event is sent every time a frame has been copied completely to the ring buffer.
需要LiveCaptureContinuous 属性设置为真时,将会使能连续采图模式。自动的从环形缓存内获得数据。

LiveCaptureContinuous = true;  //只有该属性为真,才会触发事件。ICIamgControl.LiveStart();      //不断刷新图像

2、事件的定义

private void ICIamgControl(object sender, TIS.Imaging.ICImagingControl.ImageAvailableEventArgs e){    try    {        TIS.Imaging.ImageBuffer CurrentBuffer = null;        CurrentBuffer = ICIamgControl.ImageBuffers[e.bufferIndex];        ICIamgControl.DisplayImageBuffer(CurrentBuffer);    }    catch (Exception ex)    {        System.Diagnostics.Trace.WriteLine(ex.Message);//文档明确要求不能使用MessageBox.show()来显示错误。    }}

3、转换成halcon数据
halcon中的算子genimage1,是由byte类型数据的首地址传入,原型为:

 HOperatorSet.GenImage1(out HObject image, HTuple type, HTuple width, HTuple height, HTuple pixelPointer)

由此可写转换的代码

HObject m_Image;HObject imageBuffer;IntPtr Ptr = CurrentBuffer.GetImageDataPtr();byte* buf = (byte*)Ptr ;HOperatorSet.GenImage1(out imageBuffer, "byte", ICIamgControl.ImageWidth,ICIamgControl.ImageHeight, (long)buf);HOperatorSet.MirrorImage(imageBuffer, out m_Image, "row");//需要镜像,坐标系不同

得出的imageBuffer便是Halcon里面的数据了

需要显示halcon控件的话就先隐藏ICIamgControl便可。

原创粉丝点击