亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenCV在圖像對比度的示例分析

發布時間:2021-09-06 09:05:34 來源:億速云 閱讀:165 作者:小新 欄目:開發技術

這篇文章主要介紹了OpenCV在圖像對比度的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

實現原理

圖像對比度指的是一幅圖像中明暗區域最亮的白和最暗的黑之間不同亮度層級的測量,即指一幅圖像灰度反差的大小。差異范圍越大代表對比越大,差異范圍越小代表對比越小。設置一個基準值thresh,當percent大于0時,需要令圖像中的顏色對比更強烈,即數值距離thresh越遠,則變化越大;當percent等于1時,對比強到極致,只有255和0的區分;當percent等于0時,不變;當percent小于0時,對比下降,即令遠離thresh的數值更近些;當percent等于-1時,沒有對比了,全是thresh值。

對比度調整算法的實現流程如下:

1.設置調整參數percent,取值為-100到100,類似PS中設置,歸一化后為-1到1。

2.針對圖像所有像素點單個處理。當percent大于等于0時,對比增強,調整后的RGB三通道數值為:

OpenCV在圖像對比度的示例分析

3.若percent小于0時,對比降低,此時調整后的圖像RGB三通道值為:

OpenCV在圖像對比度的示例分析

4.若percent等于1時,大于thresh則等于255,小于則等于0。

至此,圖像實現了明度的調整,算法邏輯參考xingyanxiao。C++實現代碼如下。

功能函數代碼

// 對比度
cv::Mat Contrast(cv::Mat src, int percent)
{
	float alpha = percent / 100.f;
	alpha = max(-1.f, min(1.f, alpha));
	cv::Mat temp = src.clone();
	int row = src.rows;
	int col = src.cols;
	int thresh = 127;
	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];
			int newb, newg, newr;
			if (alpha == 1)
			{
				t[3 * j + 2] = r > thresh ? 255 : 0;
				t[3 * j + 1] = g > thresh ? 255 : 0;
				t[3 * j] = b > thresh ? 255 : 0;
				continue;
			}
			else if (alpha >= 0)
			{
				newr = static_cast<int>(thresh + (r - thresh) / (1 - alpha));
				newg = static_cast<int>(thresh + (g - thresh) / (1 - alpha));
				newb = static_cast<int>(thresh + (b - thresh) / (1 - alpha));
			}
			else {
				newr = static_cast<int>(thresh + (r - thresh) * (1 + alpha));
				newg = static_cast<int>(thresh + (g - thresh) * (1 + alpha));
				newb = static_cast<int>(thresh + (b - thresh) * (1 + alpha));
 
			}
			newr = max(0, min(255, newr));
			newg = max(0, min(255, newg));
			newb = max(0, min(255, newb));
			t[3 * j + 2] = static_cast<uchar>(newr);
			t[3 * j + 1] = static_cast<uchar>(newg);
			t[3 * j] = static_cast<uchar>(newb);
		}
	}
	return temp;
}

C++測試代碼

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
 
cv::Mat Contrast(cv::Mat src, int percent);
 
int main()
{
	cv::Mat src = imread("5.jpg");
	cv::Mat result = Contrast(src, 50.f);
	imshow("original", src);
	imshow("result", result);
	waitKey(0);
	return 0;
}
 
// 對比度
cv::Mat Contrast(cv::Mat src, int percent)
{
	float alpha = percent / 100.f;
	alpha = max(-1.f, min(1.f, alpha));
	cv::Mat temp = src.clone();
	int row = src.rows;
	int col = src.cols;
	int thresh = 127;
	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];
			int newb, newg, newr;
			if (alpha == 1)
			{
				t[3 * j + 2] = r > thresh ? 255 : 0;
				t[3 * j + 1] = g > thresh ? 255 : 0;
				t[3 * j] = b > thresh ? 255 : 0;
				continue;
			}
			else if (alpha >= 0)
			{
				newr = static_cast<int>(thresh + (r - thresh) / (1 - alpha));
				newg = static_cast<int>(thresh + (g - thresh) / (1 - alpha));
				newb = static_cast<int>(thresh + (b - thresh) / (1 - alpha));
			}
			else {
				newr = static_cast<int>(thresh + (r - thresh) * (1 + alpha));
				newg = static_cast<int>(thresh + (g - thresh) * (1 + alpha));
				newb = static_cast<int>(thresh + (b - thresh) * (1 + alpha));
 
			}
			newr = max(0, min(255, newr));
			newg = max(0, min(255, newg));
			newb = max(0, min(255, newb));
			t[3 * j + 2] = static_cast<uchar>(newr);
			t[3 * j + 1] = static_cast<uchar>(newg);
			t[3 * j] = static_cast<uchar>(newb);
		}
	}
	return temp;
}

測試效果

OpenCV在圖像對比度的示例分析

圖1 原圖

OpenCV在圖像對比度的示例分析 

圖2 參數為50的效果圖

OpenCV在圖像對比度的示例分析

圖3 參數為-50的效果圖

通過調整percent可以實現圖像對比度的調整。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“OpenCV在圖像對比度的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通渭县| 肥乡县| 陆良县| 仙居县| 南陵县| 涞源县| 成都市| 肇东市| 澎湖县| 武城县| 故城县| 扶绥县| 财经| 衢州市| 江口县| 布尔津县| 五河县| 娄底市| 桦甸市| 家居| 大厂| 庆城县| 元江| 宜兰县| 南陵县| 灌南县| 疏附县| 普洱| 玉山县| 临武县| 离岛区| 邛崃市| 工布江达县| 通化县| 康马县| 贺州市| 马山县| 定西市| 安溪县| 全州县| 晴隆县|