OpenCV--二值化
生活随笔
收集整理的這篇文章主要介紹了
OpenCV--二值化
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
- 圖像的二值化,就是將圖像上的像素點的灰度值設(shè)置為0或255,也就是將整個圖像呈現(xiàn)出明顯的只有黑和白的視覺效果;
- 二值化一般是提取輪廓的準(zhǔn)備工作;
- 二值化處理之后,圖像只有0或255,變成黑白圖像。
OpenCV中有全局二值化和局部二值化,全局二值化對光線敏感,局部二值化可以克服光線的影響
全局二值化
double threshold( InputArray src,//src輸入數(shù)組(多通道,8位或32位浮點)。OutputArray dst,//dst輸出數(shù)組的大小和類型與src相同,通道數(shù)相同。double thresh, //二值化閾值,閾值兩端的分別置為0、255double maxval, //與#THRESH_BINARY=0和#THRESH_BINARY_INV=1一起使用的maxval最大值類型。(8位圖像為255)int type //二值化類型);全局二值化類型(第五個參數(shù)type):
CV_THRESH_BINARY =0, /**值大于閾值置為最大值,否則為0*/CV_THRESH_BINARY_INV =1, /**值大于閾值置為0,否則為最大值*/CV_THRESH_TRUNC =2, /**值大于閾值置為閾值,否則不變*/CV_THRESH_TOZERO =3, /**值大于閾值不變,否則置為0*/CV_THRESH_TOZERO_INV =4, /**值大于閾值置為0,否則不變*/CV_THRESH_OTSU =8, /**<利用大津法自動選擇最優(yōu)閾值;將標(biāo)志與上述CV_THRESH_x值之一組合 */CV_THRESH_TRIANGLE =16 /**采用三角形算法選擇最優(yōu)閾值;將標(biāo)志與上述CV_THRESH_x值之一組合,但不能用CV_THRESH_OTSU*/大津法和三角形算法都是根據(jù)圖像自動指定最優(yōu)閾值的算法,不需要人工指定閾值,常用OTSU,減少圖像亮度、對比度的影響。
采用大津法自動確定閾值的全局二值化效果:
threshold(inputImg,outImg,100,255,CV_THRESH_OTSU);局部二值化
void adaptiveThreshold( InputArray src, //src輸入數(shù)組(多通道,8位或32位浮點)。OutputArray dst,//dst輸出數(shù)組的大小和類型與src相同,通道數(shù)相同。double maxValue, //分配給滿足條件的像素的maxValue非零值int adaptiveMethod,//adaptiveMethod要使用的自適應(yīng)閾值算法int thresholdType, //thresholdType閾值類型,必須是#THRESH_BINARY或#THRESH_BINARY_INVint blockSize, //用于計算閾值的像素鄰域的塊大小,只能是單數(shù)double C //);自適應(yīng)閾值化計算大概過程是為每一個象素點單獨計算的閾值,即每個像素點的閾值都是不同的,就是將該像素點周圍blockSize*blockSize區(qū)域內(nèi)的像素加權(quán)平均,然后減去一個常數(shù)C,從而得到該點的閾值
自適應(yīng)閾值算法(第四個參數(shù)):
CV_ADAPTIVE_THRESH_MEAN_C =0,//為局部鄰域塊的平均值,該算法是先求出塊中的均值,再減去常數(shù)CCV_ADAPTIVE_THRESH_GAUSSIAN_C =1//為局部鄰域塊的高斯加權(quán)和。該算法是在區(qū)域中(x, y)周圍的像素根據(jù)高斯函數(shù)按照他們離中心點的距離進行加權(quán)計算,再減去常數(shù)C。閾值類型(第五個參數(shù))與全局二值化相同。
采用高斯函數(shù)求加權(quán)平均的局部二值化效果:
adaptiveThreshold(inputImg,outImg,255,CV_ADAPTIVE_THRESH_GAUSSIAN_C,CV_THRESH_BINARY,15,10);//局部二值化處理總結(jié)
以上是生活随笔為你收集整理的OpenCV--二值化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 代码翻译
- 下一篇: 气象netCDF数据可视化分析