openCV -- saturate_cast<>的含義和用法


saturate_cast主要是為了防止顏色溢出操作。

 

在圖像處理方面,無論是加是減,乘除,都會超出一個像素灰度值的范圍(0~255),saturate_cast函數的作用即是:當運算完之后,結果為負,則轉為0,結果超出255,則為255。

 

原理大致如下
if(data<0) 
        data=0; 
elseif(data>255) 
    data=255;

  比如我們對像素進行線性操作。

<1> 不使用saturate_cast<uchar>

	//三個for循環,執行運算 g_dstImage(i,j) =a*g_srcImage(i,j) + b
	for (int y = 0; y < g_srcImage.rows; y++)
	{
		for (int x = 0; x < g_srcImage.cols; x++)
		{
			for (int c = 0; c < 3; c++)
			{
				//g_dstImage.at<Vec3b>(y, x)[c] = saturate_cast<uchar>((g_nContrastValue*0.01)*(g_srcImage.at<Vec3b>(y, x)[c]) + g_nBrightValue);
				g_dstImage.at<Vec3b>(y, x)[c] = (g_nContrastValue*0.01)*(g_srcImage.at<Vec3b>(y, x)[c]) + g_nBrightValue;
			}
		}
	}

  

 

 

<2> 使用saturate_cast<uchar>

	//三個for循環,執行運算 g_dstImage(i,j) =a*g_srcImage(i,j) + b
	for (int y = 0; y < g_srcImage.rows; y++)
	{
		for (int x = 0; x < g_srcImage.cols; x++)
		{
			for (int c = 0; c < 3; c++)
			{
				g_dstImage.at<Vec3b>(y, x)[c] = saturate_cast<uchar>((g_nContrastValue*0.01)*(g_srcImage.at<Vec3b>(y, x)[c]) + g_nBrightValue);
			}
		}
	}

  

 

 

總結:

相當於是對圖像色彩變化時做的保護! 

 


免責聲明!

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



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