OpenCvSharp 学习笔记6 --图像亮度和对比度调整

一 理论:

图像变换有两种操作:
1:点操作 – 像素变换
2:区域操作 --邻域像素操作,图像周围的像素操作
调整图像亮度和对比度属于像素变换的点操作。
g ( x , y ) = α f ( x , y ) + β g(x,y)=\alpha f(x,y) + \beta g(x,y)=αf(x,y)+β
其 中 系 数 α > 0 , β 是 增 益 值 其中 系数 \alpha \gt0 , \beta 是增益值 α>0,β
说明:alpha值越大,像素之间的差值越大,对比度越强烈。 beta值是用于提高图片亮度增益值

二 演示:

代码:

static void Main(string[] args)
    {
       string imagePath = @"C:\Users\whx\Desktop\opcvImage\m3.jpg";
       Funtion1(imagePath);
    }
public static void Funtion1(string path)
        {
            //读入的图像是RGB 但是像素顺序是BGR
            using (Mat src = Cv2.ImRead(path, ImreadModes.AnyColor | ImreadModes.AnyDepth))
            using (Mat dst = new Mat(src.Size(),src.Type()))
            {

                int height = src.Rows;
                int width = src.Cols;
                int cn = src.Channels(); //通道数
                float alpha = 1.2f; //系数
                float beta = 60f;  //增益
               
                for (int row = 0; row < height; row++)
                {
                    for (int col = 0; col < width; col++)
                    {
                        if(cn==1)
                        {
                            float color = src.At<float>(row, col);
                            dst.Set<float>(row, col, color);
                        }
                        else if(cn==3)
                        {
                            
                            Vec3b color = new Vec3b
                            {
                                Item0 = (byte)Saturate.Saturate_cast((src.At<Vec3b>(row, col).Item0) * alpha + beta), //B
                                Item1 = (byte)Saturate.Saturate_cast((src.At<Vec3b>(row, col).Item1) * alpha + beta), //G
                                Item2 = (byte)Saturate.Saturate_cast((src.At<Vec3b>(row, col).Item2) * alpha + beta)  //R
                            };
                            //Vec3f:也可以 要转换 src.ConvertTo(src, MatType.CV_32F); //转换后  Vec3f  float类型 C# 报错 ,C++ 中可以
                            //Vec3f color = new Vec3f
                            //{
                            //    Item0 = Saturate.Saturate_cast((src.At<Vec3f>(row, col).Item0) * alpha + beta), //B
                            //    Item1 = Saturate.Saturate_cast((src.At<Vec3f>(row, col).Item1) * alpha + beta), //G
                            //    Item2 = Saturate.Saturate_cast((src.At<Vec3f>(row, col).Item2) * alpha + beta)  //R
                            //};
                            dst.Set<Vec3b>(row, col, color);
                        }
                    }
                }   

                using(new Window("dst Image",WindowMode.Normal,dst))
                using (new Window("src Image", WindowMode.Normal, src))
                {
                    Cv2.WaitKey(0);
                }

            }
        }

输出结果:
在这里插入图片描述
对比度和亮度提高很明显。

修改系数 和增益值 float alpha = 1f; float beta = 60f; 再次输出图像

在这里插入图片描述
float alpha = 1f; float beta = 60f 对比度没有变化,亮度提高了。可以调整这两个参数来达到预期的效果。

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值