zoukankan      html  css  js  c++  java
  • 【Emgu】一起学EmguCV(二)Image和Matrix的使用

      上一篇简单介绍了EmguCV库的简单配置,并演示了Hello World程序,本篇继续介绍关于Emgu的基本使用

    1、关于Image类的使用

      Image<TColor, TDepth>用两个参数定义:ColorDepth

    TColor类型 TDepth类型
    Gray Byte
    Bgr (Blue Green Red) SByte
    Bgra (Blue Green Red Alpha) Single (float)
    Hsv (Hue Saturation Value) Double
    Hls (Hue Lightness Saturation) UInt16
    Lab (CIE L*a*b*) Int16
    Luv (CIE L*u*v*) Int32 (int)
    Xyz (CIE XYZ.Rec 709 with D65 white point)  
    Ycc (YCrCb JPEG)  

      例如:创建一个8位的灰度图像    

            //创建一张灰度图
            Image<Gray, Byte> img1 = new Image<Gray, Byte>(480, 320);
            //创建一张蓝色的图片
            Image<Bgr, Byte> img2 = new Image<Bgr, Byte>(480, 320, new Bgr(255, 0, 0));
            //从文件创建Image
            Image<Bgr, Byte> img3 = new Image<Bgr, Byte>("MyImage.jpg");
            //从Bitmap创建Image
            Bitmap bmp = new Bitmap("MyImage.jpg");
            Image<Bgr, Byte> img4 = new Image<Bgr, Byte>(bmp);

      .Net会自动完成垃圾回收,对于比较大的图片,我们可以使用using关键字在不需要的时候自动对其进行回收

            using (Image<Gray, Single> image = new Image<Gray, Single>(1000, 800))
            {
                //对image操作
            }

      获取和设置像素颜色

      有两种方式对图片的像素进行直接操作

            Image<Bgr, byte> img = new Image<Bgr, byte>(480, 320, new Bgr(0, 255, 0));
    
            //直接通过索引访问,速度较慢,返回TColor类型
            Bgr color = img[100, 100];
            img[100, 100] = color;
    
            //通过Data索引访问,速度快
            //最后一个参数为通道数,例如Bgr图片的 0:蓝色,1:绿色,2:红色,Gray的0:灰度,返回TDepth类型
            Byte blue = img.Data[100, 100, 0];
            Byte green = img.Data[100, 100, 1];
            Byte red = img.Data[100, 100, 2];

      Image<TColor, TDepth>还对操作运算符进行了重载( + - * / )

            Image<Bgr, byte> img1 = new Image<Bgr, byte>(480, 320, new Bgr(255, 0, 0));
            Image<Bgr, byte> img2 = new Image<Bgr, byte>(480, 320, new Bgr(0, 255, 0));
    
            //img3 == new Image<Bgr, byte>(480, 320, new Bgr(255, 255, 0));
            Image<Bgr, byte> img3 = img1 + img2;

      Image<TColor, TDepth>有一个Not函数,可以让图片反色

      Image<TColor, TDepth>还提供了转换器,可以让我们更方便的编写转换逻辑 

      Image<TColor, TDepth>还有一个 ToBitmap() 函数可以转换为Bitmap

            Image<Bgr, byte> img1 = new Image<Bgr, byte>(@"test.jpg");
            Image<Bgr, byte> img2 = img1.Not();
            //下面转换效果与Not()函数相同
            Image<Bgr, Byte> img3 = img1.Convert<byte>(delegate(Byte b) { return (Byte)(255 - b); });
            pictureBox1.Image = img3.ToBitmap();

    2、关于Matrix矩阵类的使用

      Martix的使用与Image类似,这里就不阐述了

            Matrix<Single> matrix = new Matrix<Single>(480, 320);
    
            float f = matrix[100, 100];
            float df = matrix.Data[100, 100];

     

  • 相关阅读:
    input不可编辑
    span width无效
    react配置rem解决移动端适配问题
    iframe 根据内容自适应高度-终极解决方案
    页面导入样式时,使用link和@import有什么区别?
    怎么让Chrome支持小于12px 的文字?
    React Hook 父子组件相互调用方法
    CSS3实现毛玻璃效果
    React阻止组件渲染
    JSX 中内联条件渲染的方法
  • 原文地址:https://www.cnblogs.com/bomo/p/2986573.html
Copyright © 2011-2022 走看看