彩色圖像與灰度圖像的轉換


彩色圖像變成灰度格式,是要扔掉圖像的顏色信息,用灰度表示圖像的亮度信息。彩色圖像每像素占3個字節,而變成灰度圖像后,每個像素占一個字節,像素的灰度值是當前彩色圖像像素的亮度,對於一個三分量的RGB的彩色圖像像素,該店的亮度一般按以下公式計算:
I = 0.3B + 0.59G + 0.11R
另外,彩色圖像沒有顏色表,因此轉換成灰度圖像后,還要為灰度圖像生成顏色表。我們只需要為灰度圖像的顏色表分配256個長度的RGBQUAD結構體數組,並將顏色表中每一項的R,G,B分量設置成相同的值即可。

分配顏色表:

if(m_nColorTableLengthOut!=0)
{
	m_lpColorTableOut=new RGBQUAD[m_nColorTableLengthOut];
	for(int i=0; i<m_nColorTableLengthOut;i++)
	{
		m_lpColorTableOut[i].rgbBlue=i;
		m_lpColorTableOut[i].rgbGreen=i;
		m_lpColorTableOut[i].rgbRed=i;
		m_lpColorTableOut[i].rgbReserved=0;
	}
}

轉換:

for(i=0;i<m_imgHeight;i++)
{
	for(j=0;j<m_imgWidth;j++)
		*(m_pImgDataOut+i*lineByteOut+j)=0.11**(m_pImgData+i*lineByteIn+j*pixelByteIn+0)
		+0.59**(m_pImgData+i*lineByteIn+j*pixelByteIn+1)
		+0.30**(m_pImgData+i*lineByteIn+j*pixelByteIn+2)+0.5;
}

 

 

灰度圖像變彩色格式

灰度圖像變彩色,需要將彩色圖像中每個像素三個分量設置成相應的灰度值,即三個分量的值相等,對於顏色表,由於彩色圖像每有顏色表,一次不需要為彩色圖像分配顏色表緩沖區。因此灰度圖像變彩色只是在格式上變成了彩色,而沒有真正的顏色信息。

1、刪除顏色表

2、轉換:

for(i=0;i<m_imgHeight;i++)
{
	for(j=0;j<m_imgWidth;j++)
	{
		//用像素灰度值為彩色格式中每個通道賦值,三個通道數值相等
		for(k=0;k<3;k++)
			*(m_pImgDataOut+i*lineByteOut+j*3+k)=*(m_pImgData+i*lineByteIn+j);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM