我是靠谱客的博主 调皮白昼,最近开发中收集的这篇文章主要介绍OpenCV图像明度实现原理代码结果,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

实现原理

颜色所具有的亮度和暗度被称为图像明度。计算明度的基准是灰度测试卡。黑色为0,白色为10。色彩可以分为有彩色和无彩色,但后者仍然存在着明度。作为有彩色,每种色各自的亮度、暗度在灰度测试卡上都具有相应的位置值。彩度高的色对明度有很大的影响,不太容易辨别。在明亮的地方鉴别色的明度比较容易的,在暗的地方就难以鉴别。

明度调整可通过合成方式实现:若参数为正,则调整后的图像可以认为加了一层白色遮罩层,即原图像RGB数值×(1-alpha)+255*alpha;反之亦然,认为加了一层黑色遮罩层,即原图RGB*(1+alpha),其中alpha是负数。

明度调整算法的具体实现流程如下:

       1.设置调整参数percent,取值为-100到100,类似PS中设置,归一化后为-1到1。

       2.针对图像所有像素点单个处理。当percent大于等于0时,加上白色遮罩,调整后的RGB三通道数值为:

       3.若percent小于0时,加上黑色遮罩,此时调整后的图像RGB三通道值为:

代码

function.h

#pragma once
#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
Mat Lightness(Mat src, float percent);

function.cpp

#include "function.h"
// 明度
Mat Lightness(cv::Mat src, float percent)
{
float alpha = percent / 100;
alpha = max(-1.f, min(1.f, alpha));
Mat temp = src.clone();
int row = src.rows;
int col = src.cols;
for (int i = 0; i < row; ++i)
{
uchar* t = temp.ptr<uchar>(i);
uchar* s = src.ptr<uchar>(i);
for (int j = 0; j < col; ++j)
{
uchar b = s[3 * j];
uchar g = s[3 * j + 1];
uchar r = s[3 * j + 2];
if (alpha >= 0)
{
t[3 * j + 2] = static_cast<uchar>(r * (1 - alpha) + 255 * alpha);
t[3 * j + 1] = static_cast<uchar>(g * (1 - alpha) + 255 * alpha);
t[3 * j] = static_cast<uchar>(b * (1 - alpha) + 255 * alpha);
}
else
{
t[3 * j + 2] = static_cast<uchar>(r * (1 + alpha));
t[3 * j + 1] = static_cast<uchar>(g * (1 + alpha));
t[3 * j] = static_cast<uchar>(b * (1 + alpha));
}
}
}
return temp;
}

main.cpp

#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/opencv.hpp>
#include "function.h"
using namespace cv;
using namespace std;
int main()
{
Mat scr = imread("F:\picture\江.jpg");
Mat res = Lightness(scr, 25.0);
imshow("原图", scr);
imshow("处理后", res);
waitKey(0);
return 0;
}

结果

原图

处理后的图像

 希望以上内容对你有所帮助,如果喜欢,不妨给个3连,感谢观看!

最后

以上就是调皮白昼为你收集整理的OpenCV图像明度实现原理代码结果的全部内容,希望文章能够帮你解决OpenCV图像明度实现原理代码结果所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部