opencv_python阈值处理
看了好多博客,最終發(fā)現(xiàn)得好好研究一個(gè)人的博客并去做實(shí)驗(yàn),才能達(dá)到最好的學(xué)習(xí)效果。
https://blog.csdn.net/on2way/article/details/46812121
參考其博客,并發(fā)現(xiàn)一個(gè)文檔網(wǎng)址:
https://docs.opencv.org/3.2.0/d7/d4d/tutorial_py_thresholding.html
是不錯(cuò)的學(xué)習(xí)資料
本片博客主要使用python_opencv嘗試了三種閾值處理方法,現(xiàn)總結(jié)如下,并把自己嘗試的代碼附上。
?圖像的閾值處理(python下opencv使用)
1.簡(jiǎn)單閾值
簡(jiǎn)單閾值最為簡(jiǎn)單,選取一個(gè)全局閾值,然后把整幅圖像分成非黑即白的二值圖像。函數(shù)為
cv.threshold(),該函數(shù)有四個(gè)參數(shù),第一個(gè)為原圖像,第二個(gè)進(jìn)行分類的閾值,第三個(gè)是高于(低于)閾值時(shí)所賦予的新值,第四個(gè)是一個(gè)方法選擇參數(shù),常用方法選擇參數(shù)有:
- cv2.THRESH_BINARY(黑白二值) 高于閾值的設(shè)置為新值,低于閾值的為0
- cv2.THRESH_BINARY_INV(黑白二值反轉(zhuǎn)) 與上一個(gè)反過來
- cv2.THRESH_TRUNC (得到的圖像為多像素值) 高于閾值的全為閾值,低于閾值的不變
- cv2.THRESH_TOZERO 高于閾值的不變,低于閾值的全為0
- cv2.THRESH_TOZERO_INV 與上一個(gè)反過來
?
- 相關(guān)代碼:
2.自適應(yīng)閾值
自適應(yīng)閾值看成是一個(gè)局部性的閾值,通過規(guī)定一個(gè)區(qū)域大小,比較這個(gè)點(diǎn)與區(qū)域大小里面像素點(diǎn)的平均值(或者其他特征)的大小關(guān)系確定這個(gè)像素點(diǎn)是屬于黑或者白(如果是二值情況)。使用函數(shù)為:cv2.adaptiveThreshold() (僅用于灰度圖像)
該函數(shù)需要6個(gè)參數(shù):
?
- 第一個(gè)原始圖像
- 第二個(gè)像素值上限
- 第三個(gè)自適應(yīng)方法Adaptive Method:
- — cv2.ADAPTIVE_THRESH_MEAN_C :領(lǐng)域內(nèi)均值
- —cv2.ADAPTIVE_THRESH_GAUSSIAN_C :領(lǐng)域內(nèi)像素點(diǎn)加權(quán)和,權(quán) 重為一個(gè)高斯窗口
- 第四個(gè)值的賦值方法:只有cv2.THRESH_BINARY 和cv2.THRESH_BINARY_INV
- 第五個(gè)Block size:規(guī)定領(lǐng)域大小(一個(gè)正方形的領(lǐng)域)
- 第六個(gè)常數(shù)C,閾值等于均值或者加權(quán)值減去這個(gè)常數(shù)(為0相當(dāng)于閾值 就是求得領(lǐng)域內(nèi)均值或者加權(quán)值)
這種方法理論上得到的效果更好,相當(dāng)于在動(dòng)態(tài)自適應(yīng)的調(diào)整屬于自己像素點(diǎn)的閾值,而不是整幅圖像都用一個(gè)閾值。
?
- 相關(guān)代碼:
3.Otsu’s二值化
前面對(duì)于閾值的處理上,我們選擇的閾值都是127,那么實(shí)際情況下,怎么去選擇這個(gè)127呢?有的圖像可能閾值不是127得到的效果更好。那么這里我們需要算法自己去尋找到一個(gè)閾值,而Otsu’s就可以自己找到一個(gè)認(rèn)為最好的閾值。并且Otsu’s非常適合于圖像灰度直方圖具有雙峰的情況,他會(huì)在雙峰之間找到一個(gè)值作為閾值,對(duì)于非雙峰圖像,可能并不是很好用。那么經(jīng)過Otsu’s得到的那個(gè)閾值就是函數(shù)cv2.threshold的第一個(gè)參數(shù)了。因?yàn)镺tsu’s方法會(huì)產(chǎn)生一個(gè)閾值,那么函數(shù)cv2.threshold的的第二個(gè)參數(shù)(設(shè)置閾值)就是0了,并且在cv2.threshold的方法參數(shù)中還得加上語句cv2.THRESH_OTSU。那么什么是雙峰圖像(只能是灰度圖像才有),就是圖像的灰度統(tǒng)計(jì)圖中可以明顯看出只有兩個(gè)波峰。
?
- 相關(guān)代碼:
?
?
?
總結(jié)
以上是生活随笔為你收集整理的opencv_python阈值处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用MDB查看变量的值(2)
- 下一篇: 用python画枫叶代码-Python自