C#使用OpenCVSharp对视频进行帧提取,并且转换成Halcon可使用

基于OpenCVSharp对视频进行帧提取

1、获取视频每一帧,并且保存在List集合(如果是比较大的视频,不建议这样处理)

/// <summary>
        /// 取视频帧
        /// </summary>
        /// <param name="path">视频地址</param>
        /// <returns></returns>
        public static List<HObject> GetPicFromVideo(string path)
        {
            HObject HImage;
            List<HObject> HImage_L = new List<HObject>();
            var cap = new VideoCapture();//OpenCV视频帧捕获
            Mat Image = new Mat();
            if (cap.Open(path))//输入视频进行捕获
            {
                bool state = true;
                while (state)
                {
                    cap.Read(Image);//输出捕获帧
                    if (Image.Empty())
                    {
                        state = false;
                        cap.Dispose();
                        return HImage_L;
                    }
                    Mat2HObjectBpp24(Image, out HImage);
                    HImage_L.Add(HImage);
                }
            }
            cap.Dispose();
            return HImage_L;
        }

2、对取出的视频进行格式转换(三通道转换)

public static void Mat2HObjectBpp24(Mat mat, out HObject image)
        {
            int ImageWidth = mat.Width;
            int ImageHeight = mat.Height;
            int channel = mat.Channels();
            long size = ImageWidth * ImageHeight * channel;
            int col_byte_num = ImageWidth * channel;

            byte[] rgbValues = new byte[size];
            unsafe
            {
                for (int i = 0; i < mat.Height; i++)
                {
                    IntPtr c = mat.Ptr(i);
                    //byte* c1 = (byte*)c;
                    System.Runtime.InteropServices.Marshal.Copy(c, rgbValues, i * col_byte_num, col_byte_num);
                }

                void* p;
                IntPtr ptr;
                fixed (byte* pc = rgbValues)
                {
                    p = (void*)pc;
                    ptr = new IntPtr(p);

                }
                HOperatorSet.GenImageInterleaved(out image, ptr, "bgr", ImageWidth, ImageHeight, 0, "byte", 0, 0, 0, 0, -1, 0);
            }
        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值