最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?opencv圖像處理實(shí)現(xiàn)灰度變換示例

 更新時(shí)間:2022年05月12日 15:55:10   作者:淺念念52  
這篇文章主要為大家介紹了C++?opencv圖像處理灰度變換的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

灰度變換概念

在圖像預(yù)處理中,圖像的灰度變換是圖像增強(qiáng)的重要手段,灰度變換可以使圖像對(duì)比度擴(kuò)展,圖像清晰,特征明顯,灰度變換主要利用點(diǎn)運(yùn)算來(lái)修正像素灰度,由輸入像素點(diǎn)的灰度值確定相應(yīng)輸出點(diǎn)的灰度值,是一種基于圖像變換的操作。

灰度變換的作用

1.改善圖像是質(zhì)量,顯示更多的細(xì)節(jié),提高圖像的對(duì)比度

2.有選擇的突出圖像感興趣的特征或者抑制圖像中不需要的特征

3.可以有效的改變圖像的直方圖的分布,使像素的分布更加均勻

灰度變換的方法

1.線性灰度變換

2.非線性灰度變換(對(duì)數(shù)變換,冪律變換(伽馬變換))

灰度化

灰度的概念

在數(shù)字圖像中,像素是基本的表示單位,各個(gè)像素的亮安程度用灰度值來(lái)標(biāo)識(shí),只含亮度信息,不含色彩信息的圖像稱為灰度圖像,對(duì)于單色圖像,它的每個(gè)像素的灰度值用【0,255】區(qū)間的整數(shù)表示,即圖像分為256個(gè)灰度等級(jí),對(duì)于彩色圖像,他的每個(gè)像素由R,G,B三個(gè)單色調(diào)配而成,如果每個(gè)像素的R,G,B完全相同,也就是R=G=B=D,該圖像就是灰度圖像,其中D被稱為各個(gè)像素的灰度值。

對(duì)彩色圖進(jìn)行灰度化

1.加權(quán)平均值法

D=0.299R+0.587G+0.114*B

代碼如下:

#include<iostream>
#include<opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat img, img2;
	img = imread("貓1.jpg");
	imshow("原圖", img);
	img2.create(img.size(), 0);
	for (int i = 0; i < img.rows; i++)
	{
		for (int j = 0; j < img.cols; j++)
		{
			img2.at<uchar>(i, j) = saturate_cast<uchar>(0.114*img.at<Vec3b>(i, j)[0] + 0.587*img.at<Vec3b>(i, j)[1] + 0.299*img.at<Vec3b>(i, j)[2]);
		}
	}
	imshow("經(jīng)驗(yàn)公式", img2);
	waitKey(0);
}

效果如下:

2.取最大值

代碼如下:

int main()
{
	Mat img, img2;
	img = imread("貓1.jpg");
	imshow("原圖", img);
	img2.create(img.size(), 0);
	for (int i = 0; i < img.rows; i++)
	{
		for (int j = 0; j < img.cols; j++)
		{
			int max = img.at<Vec3b>(i, j)[0];
			for (int x = 0; x < 3; x++)
			{
				if (max < img.at<Vec3b>(i, j)[x])
				{
					max = img.at<Vec3b>(i, j)[x];
				}
			}
			img2.at<uchar>(i, j) = saturate_cast<uchar>(max);
		}
	}
	imshow("最大值", img2);
	waitKey(0);
}

3.平均值

代碼如下:

int main()
{
	Mat img, img2;
	img = imread("貓1.jpg");
	imshow("原圖", img);
	img2.create(img.size(), 0);
	for (int i = 0; i < img.rows; i++)
	{
		for (int j = 0; j < img.cols; j++)
		{
			img2.at<uchar>(i, j) = saturate_cast<uchar>((img.at<Vec3b>(i, j)[0] + img.at<Vec3b>(i, j)[1] + img.at<Vec3b>(i, j)[2])/3);
		}
	}
	imshow("平均值", img2);
	waitKey(0);
}

灰度的線性變換

圖像的線性變換是圖像處理的基本運(yùn)算,通常應(yīng)用在調(diào)整圖像的畫(huà)面質(zhì)量方面,如圖像對(duì)比度,亮度及反轉(zhuǎn)等操作?;叶鹊木€性變換就是將圖像中所有點(diǎn)的灰度按照線性灰度變換函數(shù)進(jìn)行變換。

1.線性變換

y=kx+b;

代碼如下:

int main()
{
	Mat img1, img2;
	img1 = imread("貓1.jpg", 1);
	imshow("原圖", img1);
	img2 = Mat::zeros(img1.size(), 0);
	for (int i = 0; i < img1.rows; i++)
	{
		for (int j = 0; j < img1.cols; j++)
		{
			for (int s = 0; s < 3; s++)
			{
				img2.at<uchar>(i, j) = saturate_cast<uchar>(1.1*img1.at<Vec3b>(i, j)[s] + 20);
			}
		}
	}
	imshow("線性", img2);
	waitKey(0);
}

效果如下:

2.分段線性變換

請(qǐng)?zhí)砑訄D片描述

代碼如下:

int main()
{
	Mat img1, img2;
	img1 = imread("貓1.jpg", 0);
	imshow("原圖", img1);
	img2 = Mat::zeros(img1.size(), 0);
	for (int i = 0; i < img1.rows; i++)
	{
		for (int j = 0; j < img1.cols; j++)
		{
			uchar temp = img1.at<uchar>(i, j);
			if (temp <=70)
			{
				img2.at<uchar>(i, j) = saturate_cast<uchar>(0.5*temp + 20);
			}
			else if (temp > 70 && temp <= 150)
			{
				img2.at<uchar>(i, j) = saturate_cast<uchar>(1.2*temp + 100);
			}
			else if (temp > 150 && temp <= 255)
			{
				img2.at<uchar>(i, j) = saturate_cast<uchar>(0.9*temp + 55);
			}
		}
	}
	imshow("分段線性", img2);
	waitKey(0);
}

效果如下:

灰度的非線性變換

對(duì)數(shù)變換和分對(duì)數(shù)變換都屬于非線性變換

1.對(duì)數(shù)變換

對(duì)數(shù)變換能增強(qiáng)圖像暗部的細(xì)節(jié)

代碼如下:

int main()
{
	double c = 1.2;
	Mat img1, img2, img3;
	img1 = imread("貓1.jpg",0);
	img3 = Mat::ones(img1.size(), CV_32FC3);
	add(img1, Scalar(1.0), img1);
	img1.convertTo(img1, CV_32F);
	log(img1, img3);
	img3 = c*img3;
	normalize(img3, img3, 0, 255, NORM_MINMAX);//歸一化到0-255 NORM_MINMAX 線性歸一化
	convertScaleAbs(img3, img3);//轉(zhuǎn)換成8bit通道顯示
	imshow("對(duì)數(shù)變換", img3);
	waitKey(0);
}

效果如下:

2.冪律變換

冪律變換也稱伽馬變換或指數(shù)變換,主要用于圖像的校正,對(duì)漂白的圖片或過(guò)黑的圖片進(jìn)行修正,增強(qiáng)對(duì)比度

代碼如下:

int main()
{
	Mat img1, img2;
	img1 = imread("貓1.jpg",0);
	img2.create(img1.size(), img1.type());
	for (int i = 0; i < img1.rows; i++)
	{
		for (int j = 0; j < img1.cols; j++)
		{
			int gray = img1.at<uchar>(i, j);
			img2.at<uchar>(i, j) = saturate_cast<uchar>(pow(gray,0.5));
		}
	}
	normalize(img2, img2, 0, 255, NORM_MINMAX);
	imshow("冪律變換", img2);
	waitKey(0);
}

效果如下:

總結(jié)

以上就是本文的全部?jī)?nèi)容,本文簡(jiǎn)單介紹了灰度化以及灰度變換的一些基礎(chǔ)知識(shí),更多關(guān)于C++ opencv灰度變換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++中delete指針后最好將其置空的操作方法

    C++中delete指針后最好將其置空的操作方法

    C++編程中,當(dāng)你使用delete運(yùn)算符釋放指針?biāo)赶虻膬?nèi)存后,通常將該指針置空,如果一個(gè)指針在被刪除后沒(méi)有置空,而你在代碼的其他部分再次嘗試刪除同一個(gè)指針,可能會(huì)導(dǎo)致程序崩潰或產(chǎn)生未定義行為,本文介紹C++中delete指針后最好將其置空的操作方法,感興趣的朋友一起看看吧
    2024-06-06
  • QML與C++幾種交互方式

    QML與C++幾種交互方式

    QML作為構(gòu)建界面的語(yǔ)言是非常簡(jiǎn)潔的,但是界面的后臺(tái)有些時(shí)候是經(jīng)常要與C++交互的,本文主要介紹了QML與C++幾種交互方式,感興趣的可以了解一下
    2024-04-04
  • C語(yǔ)言求解最長(zhǎng)公共子字符串問(wèn)題及相關(guān)的算法分析

    C語(yǔ)言求解最長(zhǎng)公共子字符串問(wèn)題及相關(guān)的算法分析

    最長(zhǎng)公共子字符串問(wèn)題即是求一個(gè)字符串在另一個(gè)字符串中出現(xiàn)的連續(xù)最多字符,這里我們來(lái)看一下面試中經(jīng)常出現(xiàn)的C語(yǔ)言求解最長(zhǎng)公共子字符串問(wèn)題及相關(guān)的算法分析
    2016-06-06
  • 利用C語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲

    利用C語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了利用C語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vs2022?x64?C/C++和匯編混編(案例代碼)

    vs2022?x64?C/C++和匯編混編(案例代碼)

    這篇文章主要介紹了vs2022?x64?C/C++和匯編混編,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 通過(guò)實(shí)例詳解C語(yǔ)言函數(shù)返回值

    通過(guò)實(shí)例詳解C語(yǔ)言函數(shù)返回值

    函數(shù)的返回值是指函數(shù)被調(diào)用之后,執(zhí)行函數(shù)體中的程序段所取得的并返回給主調(diào)函數(shù)的值,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言函數(shù)返回值的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • C++抽象數(shù)據(jù)類型介紹

    C++抽象數(shù)據(jù)類型介紹

    這篇文章主要介紹了C++抽象數(shù)據(jù)類型,我們?cè)趯W(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候,經(jīng)常遇到的一個(gè)概念就是抽象數(shù)據(jù)類型(Abstract Data Type),簡(jiǎn)稱ADT。下面我們就對(duì)ADT作更多介紹,需要的朋友可以參考一下
    2022-01-01
  • 詳解C++句柄類

    詳解C++句柄類

    本篇文章給大家詳細(xì)分析了C++句柄類的相關(guān)知識(shí)點(diǎn),對(duì)此有需要的朋友跟著學(xué)習(xí)參考下吧。
    2018-06-06
  • C語(yǔ)言中的參數(shù)傳遞機(jī)制詳解

    C語(yǔ)言中的參數(shù)傳遞機(jī)制詳解

    這篇文章主要介紹了C語(yǔ)言中的參數(shù)傳遞機(jī)制,C語(yǔ)言中函數(shù)參數(shù)的傳遞有:值傳遞、地址傳遞、引用傳遞這三種形式。下面我們?cè)敿?xì)探討下
    2017-04-04
  • C語(yǔ)言中的直接插入排序(帶圖詳細(xì))

    C語(yǔ)言中的直接插入排序(帶圖詳細(xì))

    這篇文章主要介紹了C語(yǔ)言中的直接插入排序(帶圖詳細(xì)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論

莱西市| 宁德市| 大竹县| 宽城| 东光县| 商丘市| 玉林市| 黄平县| 桐乡市| 海阳市| 重庆市| 奇台县| 日土县| 宁明县| 泗水县| 康平县| 镇原县| 满洲里市| 华安县| 富宁县| 阳信县| 柳江县| 随州市| 东至县| 德江县| 曲水县| 吉林市| 丹凤县| 沾化县| 大丰市| 三亚市| 安丘市| 阜平县| 扎赉特旗| 东乌珠穆沁旗| 琼中| 凉城县| 两当县| 神农架林区| 桦川县| 闻喜县|