赞
踩
原理:
假设输入图像为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()
结果显示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。