色婷婷AV无码久久精品,久久天天躁狠狠躁夜夜97,羞羞麻豆国产精品1区2区3区,啪影院免费线观看视频,思思久久er99精品亚洲

常州機(jī)器視覺(jué)培訓(xùn)

常州上位機(jī)軟件開發(fā)

常州工業(yè)機(jī)器人編程設(shè)計(jì)培訓(xùn)

常州PLC培訓(xùn)

常州PLC

常州PLC編程培訓(xùn)

常州電工培訓(xùn)

常州和訊plc培訓(xùn)中心歡迎您!
當(dāng)前位置:網(wǎng)站首頁(yè) > 新聞中心 新聞中心
數(shù)字圖像基本處理算法小結(jié)-常州上位機(jī)學(xué)習(xí),常州機(jī)器視覺(jué)學(xué)習(xí)
日期:2024-5-17 16:09:17人氣:  標(biāo)簽:常州上位機(jī)學(xué)習(xí) 常州機(jī)器視覺(jué)學(xué)習(xí)

1.二值化:

image.png

圖1 二值化(閾值:140)處理效果


所謂二值化簡(jiǎn)單一點(diǎn)講,就是將圖像劃分成黑和白,通過(guò)設(shè)定一個(gè)標(biāo)準(zhǔn)如果大于這個(gè)標(biāo)準(zhǔn)就設(shè)為白,如果小于這個(gè)標(biāo)準(zhǔn),就設(shè)為黑,而這個(gè)標(biāo)準(zhǔn),就叫做閾值。


具體定義如下所示:

1715838244.png

下面給出實(shí)現(xiàn)的代碼:



//二值化

//函數(shù)的參數(shù)iTR為閾值

void CBMPSampleDlg::ThresholdProcess(int iTR)

{

         //讀取BMP文件

         m_Dib.AttachMapFile("1.bmp", TRUE);

         m_Dib.CopyToMapFile("二值化.bmp");

         //將像素指針定位到圖像數(shù)據(jù)的開始

         RGBTRIPLE *rgbtri = (RGBTRIPLE *)m_Dib.m_lpImage;

         //獲得圖像的大小

         int iSize = m_Dib.GetSizeImage();

         //BMP文件頭指針

         BITMAPINFOHEADER * pBmiHeader = (BITMAPINFOHEADER *)m_Dib.m_lpBMIH;

        //遍歷每一個(gè)像素,并判斷每一個(gè)像素的分量(RGB),將其與閾值比較,然后進(jìn)行賦值

        for(int i = 0; i < iSize/( pBmiHeader->biBitCount / 8); i++)

        {

                   if ( (rgbtri[i].rgbtRed < iTR )| (rgbtri[i].rgbtGreen < iTR) | (rgbtri[i].rgbtBlue < iTR) )

                   {

                            rgbtri[i].rgbtRed   = (BYTE) 0;

                            rgbtri[i].rgbtGreen = (BYTE) 0;

                            rgbtri[i].rgbtBlue  = (BYTE) 0;

                   }

                   else

                   {

                            rgbtri[i].rgbtRed   = (BYTE) 255;

                            rgbtri[i].rgbtGreen = (BYTE) 255;

                            rgbtri[i].rgbtBlue  = (BYTE) 255;

                   }

        }

         //顯示圖像

         DrawPic();

}


在讀取圖像之后,會(huì)將指針定位到圖像像素?cái)?shù)據(jù)的開始位置,然后獲得圖像的大小,然后通過(guò)BMP文件頭獲得圖像的一個(gè)像素所占據(jù)的二進(jìn)制的位數(shù),這樣就知道一個(gè)像素由幾個(gè)字節(jié)組成的了,需要注意的是,一個(gè)像素不一定是由三個(gè)字節(jié)組成的,比如是灰度圖像其只需要一個(gè)字節(jié)來(lái)存儲(chǔ)一個(gè)像素究竟是灰到什么程度其范圍在0-255 之間,而彩色圖像卻是由三種顏色組成的也就是所說(shuō)的三原色RGB分別為Red、Green、Blue三種顏色組成,這三種顏色每個(gè)分量各占一個(gè)字節(jié),所以這里需要三個(gè)字節(jié),另外在BMP圖像中還一個(gè)結(jié)構(gòu)為RGBQUAD的結(jié)構(gòu)體,這里一個(gè)像素占據(jù)的是4個(gè)字節(jié),其實(shí),這里就涉及到了8位圖像24位圖像以及32位圖像的問(wèn)題了,所謂的8位圖像其實(shí),每一個(gè)像素占一個(gè)字節(jié),24位圖像,每一個(gè)像素占據(jù)3個(gè)字節(jié)、而32位圖像每一個(gè)像素占據(jù)4個(gè)字節(jié)就是這么來(lái)的。代碼中,首先會(huì)讀取原始圖像文件,文件的格式為BMP的,關(guān)于BMP圖像的存儲(chǔ)結(jié)構(gòu),在接下來(lái)的文章中會(huì)講到。


2.海報(bào)化

image.png

圖2 海報(bào)化處理效果


所謂的海報(bào)化其實(shí)就是將每一個(gè)像素的分量與224進(jìn)行與運(yùn)算,而244的16進(jìn)制表示可以表示成0xe0,前面介紹了一個(gè)像素的分量的范圍在0-255范圍內(nèi),所以只需要將這兩個(gè)數(shù)值的二進(jìn)制位相與即可完成海報(bào)化的處理效果。


下面為實(shí)現(xiàn)的具體代碼:


//海報(bào)化

void CBMPSampleDlg::Posterize()

{

         m_Dib.AttachMapFile("1.bmp", TRUE);

         m_Dib.CopyToMapFile("海報(bào)化.bmp");

         RGBTRIPLE *rgbtri = (RGBTRIPLE *)m_Dib.m_lpImage;

         int iSize = m_Dib.GetSizeImage();

         BITMAPINFOHEADER * pBmiHeader = (BITMAPINFOHEADER *)m_Dib.m_lpBMIH;

         for(int i = 0; i < iSize/( pBmiHeader->biBitCount / 8); i++)

         {

                   rgbtri[i].rgbtRed   = (BYTE) (rgbtri[i].rgbtRed & 0xe0);

                   rgbtri[i].rgbtGreen = (BYTE) (rgbtri[i].rgbtGreen & 0xe0);

                   rgbtri[i].rgbtBlue  = (BYTE) (rgbtri[i].rgbtBlue & 0xe0);

         }

         DrawPic();

}


上面的這段代碼是參考DirectShow里面的ezrgb24濾鏡這個(gè)例子改寫的,另外下面的灰度化也是采用里面的改寫的。


3.灰度化

image.png

圖3 灰度化處理效果


灰度化有很多種處理方法,有分量法、最大值法、平均值法以及加權(quán)平均值法。


1)分量法


將彩色圖像中的三分量的亮度作為三個(gè)灰度圖像的灰度值,可根據(jù)應(yīng)用需要選取一種灰度圖像。

f1(i,j)=R(i,j) f2(i,j)=G(i,j)f3(i,j)=B(i,j)

其中fk(i,j)(k=1,2,3)為轉(zhuǎn)換后的灰度圖像在(i,j)處的灰度值。


2)最大值法


將彩色圖像中的三分量亮度的最大值作為灰度圖的灰度值。

f(i,j)=max(R(i,j),G(i,j),B(i,j))


3) 平均值法


將彩色圖像中的三分量亮度求平均得到一個(gè)灰度圖。

f(i,j)=(R(i,j)+G(i,j)+B(i,j)) /3


4) 加權(quán)平均法


根據(jù)重要性及其它指標(biāo),將三個(gè)分量以不同的權(quán)值進(jìn)行加權(quán)平均。由于人眼對(duì)綠色的敏感最高,對(duì)藍(lán)色敏感最低,因此,按下式對(duì)RGB三分量進(jìn)行加權(quán)平均能得到較合理的灰度圖像。

f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))

在我們的程序中,我們采用的是加權(quán)平均法進(jìn)行灰度化。


下面為實(shí)現(xiàn)的代碼:


//灰度化

void CBMPSampleDlg::ConvertToGray()

{

         m_Dib.AttachMapFile("1.bmp", TRUE);

         m_Dib.CopyToMapFile("灰度化.bmp");

         RGBTRIPLE *rgbtri = (RGBTRIPLE *)m_Dib.m_lpImage;

         int iSize = m_Dib.GetSizeImage();

         BITMAPINFOHEADER * pBmiHeader = (BITMAPINFOHEADER *)m_Dib.m_lpBMIH;

         int iGrayvalue = 0;

    //遍歷每一個(gè)像素

         for(int i = 0; i < iSize/( pBmiHeader->biBitCount / 8); i++)

         {

                   iGrayvalue = int( rgbtri[i].rgbtBlue * 0.11 + rgbtri[i].rgbtGreen * 0.59 + rgbtri[i].rgbtRed * 0.3 );

                   rgbtri[i].rgbtRed   = (BYTE) iGrayvalue;

                   rgbtri[i].rgbtGreen = (BYTE) iGrayvalue;

                   rgbtri[i].rgbtBlue  = (BYTE) iGrayvalue;

         }

         DrawPic();

}


在上述代碼中,通過(guò)遍歷每一個(gè)像素,然后計(jì)算該像素的三個(gè)分量的加權(quán)平均值,將三個(gè)分量設(shè)置成同一個(gè)值,這樣就實(shí)現(xiàn)了對(duì)圖像的灰度化處理。


4.模糊化

image.png

圖4 模糊化處理效果


其實(shí)所謂的模糊化,就是將各個(gè)像素的相鄰的像素的各個(gè)分量的值相加,然后除以2就可以實(shí)現(xiàn)對(duì)圖像的模糊處理。


下面給出代碼:


//模糊化

void CBMPSampleDlg::Blur()

{

         m_Dib.AttachMapFile("1.bmp", TRUE);

         m_Dib.CopyToMapFile("模糊化.bmp");

         RGBTRIPLE *rgbtri = (RGBTRIPLE *)m_Dib.m_lpImage;

         int iSize = m_Dib.GetSizeImage();

         BITMAPINFOHEADER * pBmiHeader = (BITMAPINFOHEADER *)m_Dib.m_lpBMIH;

         LONG lHeight = pBmiHeader->biHeight;

         LONG lWidth = pBmiHeader->biWidth;

         for (int y = 0 ; y < lHeight; y++) {

                   for (int x = 2 ; x < lWidth; x++, rgbtri ++) {

                            rgbtri->rgbtRed   = (BYTE) ((rgbtri->rgbtRed + rgbtriimage.png.rgbtRed) >> 1);

                            rgbtri->rgbtGreen = (BYTE) ((rgbtri->rgbtGreen + rgbtriimage.png.rgbtGreen) >> 1);

                            rgbtri->rgbtBlue  = (BYTE) ((rgbtri->rgbtBlue + rgbtriimage.png.rgbtBlue) >> 1);

                   }

                   rgbtri +=2;

         }

         DrawPic();

}

上面的代碼同樣是遍歷每一個(gè)像素將前一個(gè)像素和后一個(gè)像素相加,然后將獲得的值右移一位,這樣就能實(shí)現(xiàn)除以2的效果,之所以做位運(yùn)算,是因?yàn)槲贿\(yùn)算的速度比除法運(yùn)算要快很多。


本文網(wǎng)址:
下一篇:沒(méi)有資料

相關(guān)信息:
版權(quán)所有 CopyRight 2006-2017 江蘇和訊自動(dòng)化設(shè)備有限公司 常州自動(dòng)化培訓(xùn)中心 電話:0519-85602926 地址:常州市新北區(qū)府琛商務(wù)廣場(chǎng)2號(hào)樓1409室
蘇ICP備14016686號(hào)-2 技術(shù)支持:常州山水網(wǎng)絡(luò)
本站關(guān)鍵詞:常州PLC培訓(xùn) 常州PLC編程培訓(xùn) 常州PLC編程 常州PLC培訓(xùn)班 網(wǎng)站地圖 網(wǎng)站標(biāo)簽
在線與我們?nèi)〉寐?lián)系
色婷婷AV无码久久精品,久久天天躁狠狠躁夜夜97,羞羞麻豆国产精品1区2区3区,啪影院免费线观看视频,思思久久er99精品亚洲