python---簡單最大類間方差法(OTSU)算法


from matplotlib import pyplot as plt
# cv2.imread()用於讀取圖片文件
# imread函數有兩個參數,第一個參數是圖片路徑,第二個參數表示讀取圖片的形式
image = cv2.imread('shengwuxibao.jpg')
# cv2.cvtColor(p1,p2) 是顏色空間轉換函數,p1是需要轉換的圖片,p2是轉換成何種格式。
# cv2.COLOR_BGR2GRAY 將BGR格式轉換成灰度圖片
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# plt.subplot(131)
# 其中131表示我們整個圖是由一行三列的子圖構成的
#    cv2.imShow()函數可以在窗口中顯示圖像
plt.subplot(131),plt.imshow(image,'gray')
# xticks :設置x軸 y軸的位置
plt.title('source image'),plt.xticks([]),plt.yticks([])
# hist:在x軸上繪制定量數據的分布特征(用於連續數據,而柱狀圖用於離散數據)
# image.ravel():將多為數組降為一維數組。 256是bins 每32為是1bin 總共8個bin
plt.subplot(132),plt.hist(image.ravel(),256)
plt.title('Histogram'),plt.xticks([]),plt.yticks([])
#v2.threshold()函數:在opencv中比較常用,但一開始不是很理解是什么意思。
#Python: cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst
#src:表示的是圖片源
#thresh:表示的是閾值(起始值)
#maxval:表示的是最大值
#type:表示的是這里划分的時候使用的是什么類型的算法**,常用值為0(cv2.THRESH_BINARY)**
# 返回兩個參數 ret1 應該是閾值分割點 th1 應該是 經過處理后的圖片
#  cv2.THRESH_BINARY(黑白二值)
#  cv2.THRESH_BINARY_INV(黑白二值反轉)
ret1,th1 = cv2.threshold(gray,0,255,cv2.THRESH_OTSU)
print('ret1',ret1)
print('th1',th1)
plt.subplot(133),plt.imshow(th1,'gray')
plt.title('OTSU,threshold is'+str(ret1)),plt.xticks([]),plt.yticks([])
plt.show()

截圖:

 


免責聲明!

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



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