首页 > 编程语言 >C#+OpenCV基础(十三)_图片白平衡矫正

C#+OpenCV基础(十三)_图片白平衡矫正

时间:2024-07-10 17:34:42浏览次数:9  
标签:矫正 Mat C# dst 白平衡 OpenCV 灰度 wb

1、白平衡矫正 -灰度幂律变换(伽马变换)

/// <summary>
/// 白平衡矫正 -灰度幂律变换(伽马变换)
/// 对过曝和过暗的图片进行矫正
/// </summary>
/// <param name="srcMat">图片</param>
/// <returns>返回黑白图片</returns>
public static Mat WhiteBalance_PowerLaw_Transformation(Mat srcMat)
{
    Mat dstMat = new Mat(srcMat.Size(), srcMat.Type());

    Mat grayMat = new Mat();
    Cv2.CvtColor(srcMat, grayMat, ColorConversionCodes.BGR2BGRA);

    for (int w = 0; w < grayMat.Width; w++)
    {
        for (int h = 0; h < grayMat.Height; h++)
        {
            byte gray = grayMat.Get<byte>(h, w);
            dstMat.At<byte>(h, w) = Convert.ToByte(Math.Pow(gray, 0.5));  // 将灰度开方
        }
    }
    Cv2.Normalize(dstMat, dstMat, 0, 255, NormTypes.MinMax);  // 归一化;将数据归一到0~255
    return dstMat;
}

2、白平衡矫正 -灰度世界(GrayworldWB)

/// <summary>
/// 白平衡矫正 -灰度世界(GrayworldWB)
/// https://docs.opencv.org/4.x/d7/d71/classcv_1_1xphoto_1_1GrayworldWB.html#details
/// </summary>
/// <param name="src">图片</param>
/// <returns>结果图片</returns>
public static Mat WhiteBalance_Correction_GrayworldWB(Mat mat)
{
    Mat dst = new Mat();

    // 灰度世界(GrayworldWB)
    WhiteBalancer wb = CvXPhoto.CreateGrayworldWB();
    wb.BalanceWhite(mat, dst);

    return dst;
}

3、白平衡矫正 -完美反射(SimpleWB)

/// <summary>
/// 白平衡矫正 -完美反射(SimpleWB)
/// https://docs.opencv.org/4.x/d1/d8b/classcv_1_1xphoto_1_1SimpleWB.html#details
/// </summary>
/// <param name="src">图片</param>
/// <returns>结果图片</returns>
/// <exception cref="Exception"></exception>
public static Mat WhiteBalance_Correction_SimpleWB(Mat mat)
{
    Mat dst = new Mat();

    // 完美反射(SimpleWB)
    WhiteBalancer wb = CvXPhoto.CreateSimpleWB();
    wb.BalanceWhite(mat, dst);

    return dst;
}

4、白平衡矫正 -基于学习的(LearningBasedWB)

/// <summary>
/// 白平衡矫正 -基于学习的(LearningBasedWB)
/// https://docs.opencv.org/4.x/dc/dcb/tutorial_xphoto_training_white_balance.html
/// </summary>
/// <param name="src">图片</param>
/// <returns>结果图片</returns>
/// <exception cref="Exception"></exception>
public static Mat WhiteBalance_Correction_Learning(Mat mat)
{
    Mat dst = new Mat();

    // 基于学习的(LearningBasedWB)
    string model = "model/LearningBasedWB";  // 模型路径
    WhiteBalancer wb = CvXPhoto.CreateLearningBasedWB(model);
    wb.BalanceWhite(mat, dst);

    return dst;
}

标签:矫正,Mat,C#,dst,白平衡,OpenCV,灰度,wb
From: https://www.cnblogs.com/qq2806933146xiaobai/p/18294626

相关文章

  • cargo 图片转base64 完整可以运行的代码
    要将图片转换为Base64编码,可以使用Rust语言和image、base64等库。以下是一个完整的可以运行的代码示例,使用Cargo来管理依赖。 步骤 创建一个新的Cargo项目: sh Copycargonewimage_to_base64cdimage_to_base64 添加依赖:在Cargo.toml文件中添加需......
  • centos7.2上openssn7.4升级到openssn9.6
    1.升级openssl 1.0.2k到openssl-1.1.1wmkdir/software 2.下载安装包wget--no-check-certificatehttps://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz 3.编译并安装3.1安装zlibyuminstall-ygccgcc-c++glibcmakeautomakeautoconfzlibzlib-dev......
  • JS | fetch发送post请求
    在使用fetchAPI发送POST请求时,通常需要指定请求的方法为"POST",并且通过body参数传递要发送的数据。示例代码下面是一个简单的示例,演示如何使用fetchAPI发送POST请求:consturl='/api/endpoint';//替换为你的后端接口URLconstrequestData={mmsi:2098......
  • How to setup and configure mptcp on Ubuntu
    https://medium.com/high-performance-network-programming/how-to-setup-and-configure-mptcp-on-ubuntu-c423dbbf76cc  HowtosetupandconfiguremptcponUbuntu  MartenGartner·FollowPublishedinHighPe......
  • C#+OpenCV基础(十四)_绘制像素、图形、文字
    1、绘制直线///<summary>///绘制直线///</summary>///<paramname="mat">图片</param>///<paramname="startPoint">线段的第一个点</param>///<paramname="endPoint">线段的第二个点</param>///<par......
  • Using Multipath TCP to enhance bandwidth and withstand outages
    https://blog.coursemonster.com/using-multipath-tcp-to-enhance-bandwidth-and-withstand-outages/  UsingMultipathTCPtoenhancebandwidthandwithstandoutagesPostedbyMarbenzAntonioonJune16,2022MultiPathTCP(MPTCP) allowsyoutobundlenumero......
  • Setup Multipath TCP
    https://medium.com/@iheb.zannina/setup-mptcpv1-in-linux-v5-6-9b5e48173b5b  SetupMultipathTCP IhebZannina·Follow5minread·Mar23,2023 1   AbstractMPTCP,orMultipat......
  • PCA(主成分分析)--降维的基础算法
    一.原理简介PCA主成分分析,是一种使用较为广泛的数据降维算法,主要思想是将n维数据特征映射到k维上,这k维全新的正交数据特征称为主成分;PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据......
  • 【Pytorch实用教程】transformer中创建嵌入层的模块nn.Embedding的用法
    文章目录1.nn.Embedding的简单介绍1.1基本用法1.2示例代码1.3注意事项2.通俗的理解num_embeddings和embedding_dim2.1num_embeddings2.2embedding_dim2.3使用场景举例结合示例1.nn.Embedding的简单介绍nn.Embedding是PyTorch中的......
  • 视频共享交换平台LntonCVS视频监控平台智慧加油站安全管理方案
    加油站作为危化品行业的一部分,日常的加油和卸油作业安全至关重要。目前国内加油站的管理主要依赖于人为管控、监控摄像头和人工巡检,这些方法存在效率低下和反应滞后的问题。为了有效应对安全风险,急需引入人工智能、物联网和大数据技术,实现从“人工监督”向“智能监控”的升级,强......