当前位置:   article > 正文

opencv图像处理功能——对比度亮度调节_opencv 对比度调整

opencv 对比度调整

图像处理是计算机视觉领域的一个重要应用,其中对比度和亮度调节是常见的基本操作。通过调节图像的对比度和亮度,可以增强图像的视觉效果,突出感兴趣的区域,并改善图像的整体质量。在本文中,我们将介绍如何利用 Qt 框架和 OpenCV 库,开发一个简单易用的图像处理应用,实现对比度和亮度的调节。

opencv对比度亮度调节

下面是使用 OpenCV 的滑动条来分别调节图像的亮度和对比度的代码

  1. #include <opencv2/opencv.hpp>
  2. cv::Mat image;
  3. cv::Mat contrastAdjustedImage, brightnessAdjustedImage;
  4. int contrastValue = 100;
  5. int brightnessValue = 0;
  6. void contrastCallback(int, void*) {
  7. double alpha = static_cast<double>(contrastValue) / 100.0; // 计算对比度调节因子
  8. contrastAdjustedImage = cv::Mat::zeros(image.size(), image.type());
  9. image.convertTo(contrastAdjustedImage, -1, alpha, 0);
  10. cv::imshow("Contrast Adjusted Image", contrastAdjustedImage);
  11. }
  12. void brightnessCallback(int, void*) {
  13. brightnessAdjustedImage = cv::Mat::zeros(image.size(), image.type());
  14. image.convertTo(brightnessAdjustedImage, -1, 1.0, static_cast<double>(brightnessValue));
  15. cv::imshow("Brightness Adjusted Image", brightnessAdjustedImage);
  16. }
  17. int main() {
  18. image = cv::imread("image.jpg");
  19. cv::namedWindow("Contrast Adjusted Image");
  20. cv::createTrackbar("Contrast", "Contrast Adjusted Image", &contrastValue, 200, contrastCallback);
  21. contrastCallback(contrastValue, nullptr);
  22. cv::namedWindow("Brightness Adjusted Image");
  23. cv::createTrackbar("Brightness", "Brightness Adjusted Image", &brightnessValue, 100, brightnessCallback);
  24. brightnessCallback(brightnessValue, nullptr);
  25. // 等待用户操作
  26. cv::waitKey(0);
  27. cv::destroyAllWindows();
  28. return 0;
  29. }

下面是对每一行代码的详细解释:

  1. cv::Mat image; // 原始图像
  2. cv::Mat contrastAdjustedImage, brightnessAdjustedImage;
  3. int contrastValue = 100; // 对比度初始值
  4. int brightnessValue = 0; // 亮度初始值

cv::Mat image; : 声明一个 `cv::Mat` 类型的变量 `image`,用于存储原始图像。

cv::Mat contrastAdjustedImage, brightnessAdjustedImage;: 声明两个 `cv::Mat` 类型的变量,分别用于存储调节对比度和亮度后的图像。

int contrastValue = 100; : 定义一个整型变量 `contrastValue`,用于存储对比度调节的初始值。

int brightnessValue = 0; // 亮度初始值: 定义一个整型变量 `brightnessValue`,用于存储亮度调节的初始值。

对比度调节

  1. void contrastCallback(int, void*) {
  2. double alpha = static_cast<double>(contrastValue) / 100.0; // 计算对比度调节因子
  3. contrastAdjustedImage = cv::Mat::zeros(image.size(), image.type());
  4. image.convertTo(contrastAdjustedImage, -1, alpha, 0);
  5. cv::imshow("Contrast Adjusted Image", contrastAdjustedImage);
  6. }

void contrastCallback(int, void*): 定义一个回调函数 `contrastCallback`,用于处理对比度调节滑动条的变化。

double alpha = static_cast<double>(contrastValue) / 100.0;: 根据滑动条的值计算出对比度调节因子 `alpha`。

contrastAdjustedImage = cv::Mat::zeros(image.size(), image.type());: 创建一个与原始图像大小和类型相同的空白 `cv::Mat` 对象 `contrastAdjustedImage`。这里的image.size(), image.type()就是我们先前定义的原始图像image的大小和类型。

image.convertTo(contrastAdjustedImage, -1, alpha, 0);: 使用 `image.convertTo()` 函数将原始图像转换到 `contrastAdjustedImage`,并应用对比度调节。其中第一个参数就是输出图像,-1: 这是输出图像的数据类型。这里设置为 -1,表示与输入图像 image 的数据类型相同。alpha: 这是对比度调节因子。它是一个双精度浮点数,表示图像像素值的缩放比例。上面有计算这个参数的公式,alpha 的值是根据滑动条的值计算得出的,用于调节图像的对比度。0: 这是亮度调节因子。它是一个双精度浮点数,表示图像像素值的偏移量。在这里设置为 0,表示不对图像的亮度进行调节。

cv::imshow("Contrast Adjusted Image", contrastAdjustedImage);: 在名为 "Contrast Adjusted Image" 的窗口中显示调节后的图像。

亮度调节

  1. void brightnessCallback(int, void*) {
  2. brightnessAdjustedImage = cv::Mat::zeros(image.size(), image.type());
  3. image.convertTo(brightnessAdjustedImage, -1, 1.0, static_cast<double>(brightnessValue));
  4. cv::imshow("Brightness Adjusted Image", brightnessAdjustedImage);
  5. }

void brightnessCallback(int, void*)`: 定义一个回调函数 `brightnessCallback`,用于处理亮度调节滑动条的变化。

brightnessAdjustedImage = cv::Mat::zeros(image.size(), image.type());: 与上面相同创建的是亮度调整图像`cv::Mat` 对象 `brightnessAdjustedImage`。

image.convertTo(brightnessAdjustedImage, -1, 1.0, static_cast<double>(brightnessValue));`: 使用 `image.convertTo()` 函数将原始图像转换到 `brightnessAdjustedImage`,并应用亮度调节。

cv::imshow("Brightness Adjusted Image", brightnessAdjustedImage);`: 在名为 "Brightness Adjusted Image" 的窗口中显示调节后的图像。

函数的调用及滑动条的添加

  1. int main() {
  2. // 读取图像
  3. image = cv::imread("image.jpg");
  4. // 创建窗口并添加滑动条
  5. cv::namedWindow("Contrast Adjusted Image");
  6. cv::createTrackbar("Contrast", "Contrast Adjusted Image", &contrastValue, 200, contrastCallback);
  7. contrastCallback(contrastValue, nullptr);
  8. cv::namedWindow("Brightness Adjusted Image");
  9. cv::createTrackbar("Brightness", "Brightness Adjusted Image", &brightnessValue, 100, brightnessCallback);
  10. brightnessCallback(brightnessValue, nullptr);
  11. // 等待用户操作
  12. cv::waitKey(0);
  13. cv::destroyAllWindows();
  14. return 0;
  15. }

image = cv::imread("image.jpg");: 读取名为 "image.jpg" 的图像文件,并将其存储在 `image` 变量中。

cv::namedWindow("Contrast Adjusted Image");`: 创建一个名为 "Contrast Adjusted Image" 的窗口。

cv::createTrackbar("Contrast", "Contrast Adjusted Image", &contrastValue, 200, contrastCallback);: 在 "Contrast Adjusted Image" 窗口中创建一个名为 "Contrast" 的滑动条,将其与 `contrastValue` 变量和 `contrastCallback` 函数关联。

contrastCallback(contrastValue, nullptr);: 调用 `contrastCallback` 函数,初始化对比度调节后的图像显示。

cv::namedWindow("Brightness Adjusted Image");: 创建一个名为 "Brightness Adjusted Image" 的窗口。

cv::createTrackbar("Brightness", "Brightness Adjusted Image", &brightnessValue, 100, brightnessCallback);: 在 "Brightness Adjusted Image" 窗口中创建一个名为 "Brightness" 的滑动条,将其与 `brightnessValue` 变量和 `brightnessCallback` 函数关联。

brightnessCallback(brightnessValue, nullptr);: 调用 `brightnessCallback` 函数,初始化亮度调节后的图像显示。

cv::waitKey(0);: 等待用户按下任意键。

cv::destroyAllWindows();: 关闭所有打开的窗口。

return 0;: 程序正常退出。

总的来说,这个代码实现了使用滑动条分别调节图像的对比度和亮度,并实时显示调节后的结果。这种方式可以让用户更直观地感受到调节效果,并找到最合适的参数设置。

注意上述都需要添加cv的命名控件

添加

using namespace cv;

使得代码更加简洁。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/885164
推荐阅读
相关标签
  

闽ICP备14008679号