opencv调整图像亮度对比度的示例代码

yizhihongxing

下面是详细讲解“OpenCV调整图像亮度对比度的示例代码”的完整攻略。

1. 调整图像亮度

方法一:使用cv::Mat对像素值进行遍历

对于一张图像,我们可以通过遍历所有像素的方式调整图像的亮度,具体代码如下:

cv::Mat image = cv::imread("image.png");  // 读取图片

// 调整亮度
float alpha = 1.5;  // 亮度调整参数
for (int i = 0; i < image.rows; i++) {
    for (int j = 0; j < image.cols; j++) {
        for (int c = 0; c < image.channels(); c++) {
            image.at<cv::Vec3b>(i, j)[c] = cv::saturate_cast<uchar>(alpha * image.at<cv::Vec3b>(i, j)[c]);
        }
    }
}

cv::imshow("image", image);  // 显示图片
cv::waitKey();  // 等待按键

这段代码中,我们通过三重循环遍历了所有像素,并对每个像素的RGB值进行乘法运算,将图像的亮度进行了调整。

方法二:使用cv::convertTo函数

除了遍历像素值之外,还可以使用OpenCV提供的函数cv::convertTo来调整图像亮度,代码如下:

cv::Mat image = cv::imread("image.png");  // 读取图片

// 调整亮度
float alpha = 1.5;  // 亮度调整参数
cv::Mat bright_image;
image.convertTo(bright_image, -1, alpha, 0);

cv::imshow("image", bright_image);  // 显示图片
cv::waitKey();  // 等待按键

这段代码中,我们使用convertTo函数将原图像赋值给一个新的Mat对象bright_image,并将alpha和0作为参数传入convertTo函数中,从而实现对图像亮度的调整,其中第二个参数-1表示使用与原图像相同的深度和通道数。

2. 调整图像对比度

方法一:使用cv::Mat对像素值进行遍历

同样地,我们也可以通过遍历图像的每一个像素,来实现对图像对比度的调整,代码如下:

cv::Mat image = cv::imread("image.png");  // 读取图片

// 调整对比度
float alpha = 1.5;  // 对比度调整参数
for (int i = 0; i < image.rows; i++) {
    for (int j = 0; j < image.cols; j++) {
        for (int c = 0; c < image.channels(); c++) {
            image.at<cv::Vec3b>(i, j)[c] = cv::saturate_cast<uchar>(alpha * (image.at<cv::Vec3b>(i, j)[c] - 128) + 128);
        }
    }
}

cv::imshow("image", image);  // 显示图片
cv::waitKey();  // 等待按键

这段代码的原理为:对于原图像中的每一个像素,减去128后,与调整参数alpha相乘,并加上128,将调整后的像素值赋值给新的Mat对象。

方法二:使用cv::equalizeHist函数

cv::equalizeHist函数用于直方图均衡化,同样可以实现对图像对比度的调整,具体代码如下:

cv::Mat image = cv::imread("image.png", cv::IMREAD_GRAYSCALE);  // 读取灰度图像

// 直方图均衡化
cv::Mat equalized_image;
cv::equalizeHist(image, equalized_image);

cv::imshow("image", equalized_image);  // 显示图片
cv::waitKey();  // 等待按键

这段代码的原理为:使用cv::equalizeHist函数对输入的灰度图像进行直方图均衡化,得到调整后的灰度图像,即为对比度调整后的图像。

总结

本篇攻略详细讲解了两种调整图像亮度和对比度的方法,并给出了具体的代码实现。其中,第一种方法需要使用循环遍历每一个像素,而第二种方法则利用了OpenCV提供的现成函数,实现了快速调整的目的。在实际使用中,需要根据实际情况选择合适的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:opencv调整图像亮度对比度的示例代码 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • 关于Python 常用获取元素 Driver 总结

    关于Python常用获取元素Driver总结 如果我们要使用Python进行自动化测试或者爬虫相关开发,那么我们必须要掌握如何获取页面元素。本文将总结常用的Python获取元素的方法。 前置条件 在使用以下代码之前,我们需要安装selenium库,并下载对应的浏览器的驱动。 1. 通过ID获取元素 我们可以通过元素的ID进行获取,以下是获取百度首页搜索框元素…

    python 2023年5月20日
    00
  • Freebsd 6.0安装配置Apache+MySQL+PHP+Myphpadmin+Webmin

    Freebsd 6.0安装配置Apache+MySQL+PHP+Myphpadmin+Webmin 简介 在Freebsd 6.0上安装和配置Apache、MySQL、PHP、Myphpadmin及Webmin的过程。 安装Apache 首先,需要安装Apache服务器: pkg_add -r apache 安装后,启动Apache服务器: /usr/loc…

    python 2023年6月3日
    00
  • Python程序设计入门(4)模块和包

    下面我将为你详细讲解Python程序设计入门(4)模块和包的完整攻略。 什么是Python模块和包 在Python中,模块(module)是一个包含Python代码的文件,而包(package)是一个包含多个模块的目录,它们的存在可以方便地管理和组织代码。 模块和包的使用可以方便地模块化你的程序,让代码更加易于维护和扩展,同时还能提高代码的可复用性和可读性。…

    python 2023年5月31日
    00
  • python多线程扫描端口(线程池)

    下面我将详细讲解“python多线程扫描端口(线程池)”的完整攻略。 线程池的概念 线程池是一种应对高并发、高频率任务的一种解决方案,它将线程复用起来,减少了创建、销毁线程的开销,从而提高了程序的效率。 当我们需要同时进行多个扫描时,就需要采用多线程的方式来进行。而线程池则是一种比较好用的多线程技术,它可以控制线程的数量,避免资源的浪费,让线程在需要时自动重…

    python 2023年5月19日
    00
  • 100 个 Python 小例子(练习题一)

    以下是“100个Python小例子(练习题一)”的完整攻略: 一、题目描述 在本题中,要求实现以下功能: 输入某年某月某日,判断这一天是这一年的第几天? 获得用户输入的一个字符串,并计算其中英文字母和数字的个数。 二、解题思路 1. 输入某年某月某日,判断这一天是这一年的第几天? 这道题目可以采用datetime库的date类进行计算。首先通过input()…

    python 2023年5月13日
    00
  • Python实现注册、登录小程序功能

    大致流程如下: 设计数据库结构:包括用户表和会话表,用户表记录用户的账号信息和登录状态,会话表用来维护用户的登录状态; 编写Python后端代码:包括注册、登录、验证、登出等接口实现。具体实现过程请参考下面的示例说明; 编写前端页面:通过HTML、CSS、JavaScript等技术实现一个简单的注册、登录页面。 下面是两个示例: 示例一:实现注册接口 首先设…

    python 2023年5月23日
    00
  • 在Python中使用dict和set方法的教程

    在Python中使用dict和set方法的教程 什么是字典(dict)和集合(set) 在Python中,dict和set都是用来存储数据的容器类型。dict用于存储键值对,set用于存储不重复的元素。 dict和set都属于Python内建的数据类型,使用起来十分方便。 创建字典 创建字典可以使用{}或者dict()函数。 使用{}创建字典 # 创建一个空…

    python 2023年5月13日
    00
  • 一篇文章教你用Python实现一键文件重命名

    一键文件重命名攻略 文件重命名是经常要做的一件事情,Python为我们提供了方便实用的文件重命名的方法。下面就是使用Python实现一键文件重命名的攻略。 1. 导入模块 首先我们需要导入os模块,os模块提供了许多与操作系统交互的函数。 import os 2. 获取文件所在目录 使用os模块中的chdir方法改变当前工作目录,使用getcwd获取当前工作…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部