相机取图后将数据转换成对应的图像处理库图像文件

相机取图后将数据转换成对应的图像处理库图像文件


前言

不同相机取完图像后的图像数据包里包含的数据并不一定是相同的,而且相机取图后的图像数据第三方的视觉库(Halcon,visionpro等)也并不能直接使用(除非使用视觉库自带的采图工具而非相机自己的SDK)。所以一般的在相机取图后需要向目标视觉库支持的图像类型进行转换。下面的内容将陆续更新(用到了就会更新在这里)。


提要

一般的2D相机中关键的数据在于:数据集(byte[])或(Intptr) , 图像的宽width ,图像的高height

一、大华相机

首先大华的SDK中通过回调的图像数据如下;

    public interface IGrabbedRawData
    {
        byte[] Image { get; }     	//关键数据
        IntPtr Raw { get; }
        int ImageSize { get; }
        int Width { get; }			//关键数据
        int Height { get; }			//关键数据
        long BlockID { get; }
        long TimeStamp { get; }
        uint ImagePaddingX { get; }
        uint ImagePaddingY { get; }
        GvspPixelFormatType PixelFmt { get; }
        IChunkData ChunkData { get; }

        IGrabbedRawData Clone();
        void Show(IntPtr pWnd);
        void Show(IntPtr pWnd, float angle);
        Bitmap ToBitmap(bool color);
    }

1.to HImage

代码如下:

    public enum PixelFormatType
    {
        Mono8,
    }

    public class ImageData
    {
        public int Width { get; set; }
        public int Height { get; set; }

        public byte[] Raw { get; set; }
        public PixelFormatType PixelFmt { get; set; }

        public long TimeStamp { get; set; }

        public HImage ToHImage() 
        {
            HImage hImage = new HImage();
            switch (PixelFmt)
            {
                case PixelFormatType.Mono8:		//gray图像,彩色的大华相机还没用过
                    unsafe
                    {
                        void* p;
                        IntPtr ptr;
                        fixed (byte* pc = Raw)
                        {
                            p = (void*)pc;
                            ptr = new IntPtr(p);
                        }
                        hImage.GenImage1("byte", Width, Height, ptr);
                    }
                    break;
                default:
                    throw new Exception("图像格式未收录");
                    break;
            }
            return hImage;
        }


总结

跟随项目更新。