opencv學習(十六):影象的二值化
阿新 • • 發佈:2018-12-08
影象二值化介紹:https://blog.csdn.net/qq_30490125/article/details/80458500
https://blog.csdn.net/what_lei/article/details/49159655
影象二值化:基於影象的直方圖來實現的,0白色 1黑色
相關函式說明
函式threshold()的引數說明:
cv.THRESH_BINARY | cv.THRESH_OTSU)#大律法,全域性自適應閾值 引數0可改為任意數字但不起作用
cv.THRESH_BINARY | cv.THRESH_TRIANGLE)#TRIANGLE法,,全域性自適應閾值, 引數0可改為任意數字但不起作用,適用於單個波峰
cv.THRESH_BINARY)# 自定義閾值為150,大於150的是白色 小於的是黑色
cv.THRESH_BINARY_INV)# 自定義閾值為150,大於150的是黑色 小於的是白色
cv.THRESH_TRUNC)# 截斷 大於150的是改為150 小於150的保留
cv.THRESH_TOZERO)# 截斷 小於150的是改為150 大於150的保留
例項演示
程式碼如下:
# 匯入cv模組 #-*-coding:utf-8-*- import cv2 as cv import numpy as np # 全域性閾值 def threshold_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGRA2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) print("threshold value %s" % ret) cv.imshow("threshold_demo", binary) # 區域性閾值 def local_threshold_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGRA2GRAY) binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10) cv.imshow("local_threshold_demo", binary) # 自定義 def custom_threshold_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) h, w = gray.shape[:2] m = np.reshape(gray, [1, w * h]) # 化為一維陣列 mean = m.sum() / (w * h) print("mean: ", mean) ret, binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY) cv.imshow("custom_threshold_demo", binary) print("------------Hi,Python!-------------") # 讀取影象,支援 bmp、jpg、png、tiff 等常用格式 src = cv.imread("F:/Projects/images/test.png") # 建立視窗並顯示影象 cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src) # 顯示原圖 threshold_demo(src) local_threshold_demo(src) custom_threshold_demo(src) cv.waitKey(0) # 釋放視窗 cv.destroyAllWindows()
執行效果: