1 产生一个curve曲线,控制各部分图像亮度
这里是以像素最大为8bit为例子,当小于128则除以2,大于128则乘以2,到时候大家可以多写几个判断条件,以达到curve的形式
// 加载图像
cv::Mat image = cv::imread("path_to_your_image.jpg");
// 创建一个查找表
cv::Mat lut(1, 256, CV_8U);
uchar* p = lut.ptr();
for (int i = 0; i < 256; ++i)
{
if (i < 128)
p[i] = cv::saturate_cast<uchar>(i / 2);
else
p[i] = cv::saturate_cast<uchar>(i * 2);
}
// 使用查找表来改变图像的亮度
cv::Mat new_image;
cv::LUT(image, lut, new_image);
// 显示原图像和新图像
cv::imshow("Original Image", image);
cv::imshow("New Image", new_image);
imwrite("E:/test/result/tone.jpg", new_image);`在这里插入代码片`
// 等待用户按键
cv::waitKey();
2,cv::LUT(image, lut, new_image);用法
cv::LUT函数在OpenCV中用于应用查找表(Look-Up Table,LUT)到图像。查找表是一个映射,它将输入像素值映射到输出像素值。cv::LUT函数接受一个输入图像和一个查找表,然后返回一个新的图像,新图像的像素值是通过查找表从输入图像的像素值得到的。
以下是cv::LUT函数的基本用法:
cv::Mat image = cv::imread("path_to_your_image.jpg"); // 加载图像
cv::Mat lut(1, 256, CV_8U); // 创建查找表
for (int i = 0; i < 256; ++i)
lut.at<uchar>(i) = 255 - i; // 这个查找表将像素值反转,使得暗的变亮,亮的变暗
cv::Mat new_image;
cv::LUT(image, lut, new_image); // 应用查找表到图像