GW-白平衡美白算法

#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
cv::Mat GW(const cv::Mat srcImage)
{
	int beta;//美白系数
	cv::Mat  dstImage;
	vector<cv::Mat> Channels;
	cv::split(srcImage, Channels);
	cv::Mat B = Channels[0]; cv::Mat G = Channels[1]; cv::Mat R = Channels[2];
	double Baver = cv::mean(B)[0];	double Gaver = cv::mean(G)[0];	double Raver = cv::mean(R)[0];
	beta = 2;
	double K = (Baver + Gaver + Raver) / beta; //计算增益系数	
	double Kb, Kg, Kr;
	Kb = K / Baver;	Kg = K / Gaver;	Kr = K / Raver;
	//白平衡处理后的通道	
	cv::Mat dstB, dstG, dstR;
	dstB = B * Kb;	dstG = G * Kg;	dstR = R * Kr;
	cout << cv::mean(dstB)[0] << " " << cv::mean(dstG)[0] << " " << cv::mean(dstB)[0] << endl;
	vector<cv::Mat> dstChanges;
	dstChanges.push_back(dstB);	dstChanges.push_back(dstG);	dstChanges.push_back(dstR);
	cv::merge(dstChanges, dstImage);//合并通道
	return dstImage;
}
int main()
{
	cv::Mat src = cv::imread("G:\\12.png");
	cv::Mat dst = GW(src);
	cv::imshow("dst", dst);
	cv::imshow("src", src);
	cv::waitKey(0);
	system("pause");
	return 0;
}

import cv2

import numpy as np

 

def GW(orgImg):

    B, G, R = np.double(orgImg[:, :, 0]), np.double(orgImg[:, :, 1]), np.double(orgImg[:, :, 2])

    B_ave, G_ave, R_ave = np.mean(B),np.mean(G),np.mean(R)

    K = (B_ave + G_ave + R_ave) / 3

    Kb,Kg,Kr = K/B_ave,K/G_ave,K/R_ave

    Ba = (B * Kb)

    Ga = (G * Kg)

    Ra = (R * Kr)

    print(np.mean(Ba),np.mean(Ga),np.mean(Ra))

    dst_img = np.uint8(np.zeros_like(orgImg))

    dst_img[:, :, 0] = Ba

    dst_img[:, :, 1] = Ga

    dst_img[:, :, 2] = Ra

    cv2.imshow("dstimg", dst_img)

    cv2.waitKey(0)

 

if __name__ == '__main__':

    orgImg = cv2.imread("E:\Py3.6_Proje\AWB\img3.jpg")

    cv2.imshow("orgImg",orgImg)    

    cv2.waitKey(0)

    GW(orgImg)

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值