C#:三通道像素处理

2023-08-31  本文已影响0人  大龙10

一、API

1、Vec3b

2、Vec3f

二、三通道图像像素处理

        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/
上一篇 下一篇

猜你喜欢

热点阅读