OpenCV-图像对比度增强(美白)
原理:假设输入图像为A,输出图像为B,图像的线性变换提高对比度的公式可以定义为:B(r,c)=aA(r,c)+b*其中r,c是图像的像素坐标点,a为变换系数,b为初始添加值C++:#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;i...
·
原理:
假设输入图像为A,输出图像为B,图像的线性变换提高对比度的公式可以定义为:
B(r,c)=aA(r,c)+b*
其中r,c是图像的像素坐标点,a为变换系数,b为初始添加值
C++:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img,dst;
//加载图像
img=imread("D:/woman.jpg");
if (img.empty())
{
cout << "输入图像错误" << endl;
return -1;
};
imshow("original image", img);
//获取图像宽和高
int height = img.rows;
int width = img.cols;
//初始化空白图像
dst.create(img.size(), img.type());
//像素范围在0~255中越来越亮
int original_pixel = 30; //像素提高的数值
double original_alpha = 1.3; //像素提高的比例系数
for (int i=0;i<height;i++)
{
for (int j = 0; j < width; j++)
{
int B = img.at<Vec3b>(i, j)[0];
int G = img.at<Vec3b>(i, j)[1];
int R = img.at<Vec3b>(i, j)[2];
//saturate_cast函数保证输入的像素值控制在0~255,从而不会越界
dst.at<Vec3b>(i, j)[0] = saturate_cast<uchar>(B*original_alpha + original_pixel);
dst.at<Vec3b>(i, j)[1] = saturate_cast<uchar>(G*original_alpha + original_pixel);
dst.at<Vec3b>(i, j)[2] = saturate_cast<uchar>(R*original_alpha + original_pixel);
};
};
imshow("enhanced image",dst);
waitKey(0);
return 0;
};
Python:
import cv2 as cv
import numpy as np
##读取图像
img = cv.imread('D:/woman.jpg')
cv.imshow("original image",img)
##读取图像高宽和通道数
height,width,channel=img.shape
##初始化空白图像和系数
enhanced_image=np.zeros(img.shape,dtype=np.float64)
# float类型是因为后面系数是含有小数点;假如某一像素值是180,在uint8类型(整型)下,转化为180*1.5+30=300
# 300%256=44(转化后的像素值);所以应该在float64类型下。
original_pixel=30
original_alpha=1.5
#方法一(直接用矩阵去运算)
#enhanced_image=img*original_alpha+original_pixel
#方法二(通过访问像素运算)
for r in range(height):
for c in range(width):
B = img[r, c][0]
G = img[r, c][1]
R = img[r, c][2]
enhanced_image[r ,c][0] = B * original_alpha + original_pixel
enhanced_image[r, c][1] = G * original_alpha + original_pixel
enhanced_image[r, c][2] = R * original_alpha + original_pixel
enhanced_image[enhanced_image>255]=255 #对大于255的值截断为255
enhanced_image=np.round(enhanced_image) #取整
enhanced_image=enhanced_image.astype(np.uint8) #最后转化为0~255之间
cv.imshow("enhanced image",enhanced_image)
cv.waitKey(0)
cv.destroyAllWindows()
结果显示:

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)