美文网首页
C#:三通道像素处理

C#:三通道像素处理

作者: 大龙10 | 来源:发表于2023-08-31 11:48 被阅读0次

一、API

1、Vec3b

  • 通道顺序 blue grenn red 在C++中对应uchar类型 ,C#对应byte类型。
  • 像素数据结构 BGR 包含三个像素值 R代表红,red; G代表绿,green; B代表蓝,blue。
  • RGB模式就是,色彩数据模式,R在高位,G在中间,B在低位。BGR正好相反。
    例如,如果色彩数据是24位,对于RGB模式,就是高8位是R,中间8位是G,低8位是B。
    一个色彩数据共24位,3个字节。

2、Vec3f

  • 对应三通道的float类型。
  • 把CV_8UC1 转换到 CV32F1实现:
    src.convertTo(dst,CV_32F1);

二、三通道图像像素处理

        private void uiButton10_Click(object sender, EventArgs e)
        {
            Mat m2 = new Mat(src_img.Size(), src_img.Type());
            int height = src_img.Rows;
            int width = src_img.Cols;
            int cn = src_img.Channels(); //获取通道数

            #region 反转像素算法
            for (int row = 0; row < height; row++)
            {
                for (int col = 0; col < width; col++)
                {
                    if (cn == 1) //如果是单通道
                    {
                        byte p = m2.At<byte>(row, col); //获取像素
                        byte value = byte.Parse((255 - p).ToString()); //反转像素值
                        m2.Set(row, col, value); //赋值
                    }
                    else if (cn == 3) //如果是三通道
                    {
                        //读取源图的像素
                        int b = src_img.At<Vec3b>(row, col)[0];
                        int g = src_img.At<Vec3b>(row, col)[1];
                        int r = src_img.At<Vec3b>(row, col)[2];

                        Vec3b color = new Vec3b
                        {
                            Item0 = (byte)(255 - b), //反转像素   (byte)( Math.Max(r, Math.Max(b, g)));
                            Item1 = (byte)(255 - g), //                 (byte)(Math.Max(r, Math.Max(b, g)));
                            Item2 = (byte)(255 - r) //                   (byte)(Math.Max(r, Math.Max(b, g)));
                        };
                        /*  
                         Vec3b color = new Vec3b //反转像素
                        {
                           Item0 = (byte)Math.Abs(src.Get<Vec3b>(row, col).Item0 - 255),
                           Item1 = (byte)Math.Abs(src.Get<Vec3b>(row, col).Item1 - 255),
                           Item2 = (byte)Math.Abs(src.Get<Vec3b>(row, col).Item2 - 255)
                        };
                        */
                        //Math.Max(r, Math.Max(b, g));取灰度,min也可以,但是亮度不同

                        //赋值
                        m2.Set<Vec3b>(row, col, color);
                    }
                }
            }
            #endregion
            picBoxShowDel.Image = src_img.ToBitmap();
            pictureBox1.Image = m2.ToBitmap();
        }

三、资料

松山湖村民  https://sslcode.com.cn/

相关文章

  • 20180221周三~图像处理

    图像处理,需要了解图像的表示,像素层面的处理,特征层面的处理。像素层面处理,内容包括亮度调节,通道分离合并,分...

  • faster-rcnn 步骤理解

    (1)输入图像预处理; 1、图像(三通道),每个像素点减去一个均值像素,默认为(102.9801, 115.946...

  • Opencv基本的数字图像处理知识点的学习

    1.图像处理原理 - 3通道(Red,Green,Blue) - 一个像素颜色值 (b,g,...

  • 图片滤镜 之 CoreGraphics

    一、将UIImage转化为像素数据 二、对像素进行灰度处理 三、对像素进行颜色反转处理 四、将像素数据转化为UII...

  • 图像操作(像素)

    知识点 获取像素点:Mat.at(row,col) --三通道//获取像素点列表由bgr三个元素组成...

  • 2019-07-20 opencv基本操作

    灰度图只有一个通道 亮度彩色图三个通道 rgb图像由很多像素点组成的 [500,500,3] 矩阵

  • opencv-python 学习(一)

    基本原理 单通道 一个像素块对应一个矩阵的值 像素的亮度从0~255 从暗到亮 RGB通道一个像素块对应矩阵中的一...

  • 图像处理

    第三章 图像处理 1.点操作 输出图像的像素值仅仅由输入图像的像素值决定。 1.1 像素变换 ...

  • 像素处理

  • YUV颜色详情

    RGB颜色编码 RGB 图像中,每个像素点都有红、绿、蓝三个颜色通道,其中每个通道都占用 8 bit,也就是一个字...

网友评论

      本文标题:C#:三通道像素处理

      本文链接:https://www.haomeiwen.com/subject/kranmdtx.html