#include <iostream>
#include <opencv2/opencv.hpp>
namespace zhjr {
namespace utils {
bool adjustBrigthness(const cv::Mat& input_image, cv::Mat& output_image,
const float& alpha = 1.5, const float& beta = 10) {
output_image.create(input_image.size(), input_image.type());
cv::Mat input_image_;
input_image.convertTo(input_image_, CV_32F);
for (size_t row = 0; row < input_image_.rows; row++) {
for (size_t col = 0; col < input_image_.cols; col++) {
if (input_image_.channels() == 3) {
float b = input_image_.at<cv::Vec3f>(row, col)[0];
float g = input_image_.at<cv::Vec3f>(row, col)[1];
float r = input_image_.at<cv::Vec3f>(row, col)[2];
output_image.at<cv::Vec3b>(row, col)[0] =
cv::saturate_cast<uchar>(alpha * b + beta);
output_image.at<cv::Vec3b>(row, col)[1] =
cv::saturate_cast<uchar>(alpha * g + beta);
output_image.at<cv::Vec3b>(row, col)[2] =
cv::saturate_cast<uchar>(alpha * r + beta);
} else if (input_image_.channels() == 1) {
float v = input_image_.at<uchar>(row, col);
output_image.at<uchar>(row, col) =
cv::saturate_cast<uchar>(alpha * v + beta);
}
}
}
return true;
}
} // namespace utils
} // namespace zhjr
int main() {
cv::Mat input_image = cv::imread("../data/lena.jpg");
cv::Mat output_image;
if (!zhjr::utils::adjustBrigthness(input_image, output_image, 1.5, 100)) {
return EXIT_FAILURE;
}
cv::imshow("input_image", input_image);
cv::imshow("output_image", output_image);
cv::waitKey();
cv::destroyAllWindows();
return 0;
}
调整图像亮度
最新推荐文章于 2024-07-20 22:56:53 发布