日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

opencv_python阈值处理

發(fā)布時(shí)間:2023/12/20 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv_python阈值处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

看了好多博客,最終發(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)代碼:
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread("D:\\software_my_programming\\relate_to_irisrecog\\CASIA-Iris-Lamp\\001\\L\\S2001L01.jpg")#讀取圖像,0為灰度圖像,1為彩色圖像ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)ret,thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)ret,thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)ret,thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)ret,thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)titles = ['img','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']images = [img,thresh1,thresh2,thresh3,thresh4,thresh5]for i in range(6):plt.subplot(2,3,i+1)plt.imshow(images[i],'gray')plt.title(titles[i])plt.xticks([]),plt.yticks([])plt.show()

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)代碼:
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread("D:\\software_my_programming\\\relate_to_irisrecog\\CASIA-Iris-Lamp\\001\\L\\S2001L01.jpg",0)#讀取圖像,0為灰度圖像,1為彩色圖像ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)thresh2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,\cv2.THRESH_BINARY,11,2)thresh3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\cv2.THRESH_BINARY,11,2)titles = ['img','BINARY','ADAPTIVE_THRESH_MEAN_C','ADAPTIVE_THRESH_GAUSSIAN_C',]images = [img,thresh1,thresh2,thresh3]for i in range(4):plt.subplot(2,2,i+1)plt.imshow(images[i],'gray')plt.title(titles[i])plt.xticks([]),plt.yticks([])plt.show()

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)代碼:
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread("D:\\software_my_programming\\\relate_to_irisrecog\\CASIA-Iris-Lamp\\001\\L\\S2001L01.jpg",0)#讀取圖像,0為灰度圖像,1為彩色圖像ret1,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)#簡(jiǎn)單濾波ret2,thresh2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)#Ostu濾波print(ret2)plt.subplot(221),plt.imshow(img,'gray')plt.subplot(222),plt.hist(img.ravel(),256)#該方法將矩陣轉(zhuǎn)化為一維plt.subplot(223),plt.imshow(thresh1,'gray')plt.subplot(224),plt.imshow(thresh2,'gray')plt.show()

?

?

?

總結(jié)

以上是生活随笔為你收集整理的opencv_python阈值处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。