一:影象二值化的基本原理
影象二值化就是將影象上的畫素點的灰度值設定為0或255,也就是將整個影象呈現出明顯的黑白效果的過程。在數字影象處理中,二值影象占有非常重要的地位,影象的二值化使影象中資料量大為減少,從而能凸顯出目標的輪廓。
二:影象二值化的基本操作
我們使用opencv中的函式來進行影象二值化操作,在opencv中影象二值化分為普通影象二值化和區域性閾值化。這兩部分我們分別使用threshold和adaptivethreshold函式來實現。
**如下:
#影象二值化
import cv2 as cv
import numpy as np
#全域性閾值
def threshold_demo(image):
gray = cv.cvtcolor(image, cv.color_rgb2gray) #把輸入影象灰度化
#直接閾值化是對輸入的單通道矩陣逐畫素進行閾值分割。
ret, binary = cv.threshold(gray, 0, 255, cv.thresh_binary | cv.thresh_********)
print("threshold value %s"%ret)
cv.namedwindow("binary0", cv.window_normal)
cv.imshow("binary0", binary)
#區域性閾值
def local_threshold(image):
gray = cv.cvtcolor(image, cv.color_rgb2gray) #把輸入影象灰度化
#自適應閾值化能夠根據影象不同區域亮度分布,改變閾值
binary = cv.adaptivethreshold(gray, 255, cv.adaptive_thresh_gaussian_c,cv.thresh_binary, 25, 10)
cv.namedwindow("binary1", cv.window_normal)
cv.imshow("binary1", binary)
#使用者自己計算閾值
def custom_threshold(image):
gray = cv.cvtcolor(image, cv.color_rgb2gray) #把輸入影象灰度化
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.namedwindow("binary2", cv.window_normal)
cv.imshow("binary2", binary)
src = cv.imread('1.png')
cv.namedwindow('input_image', cv.window_normal) #設定為window_normal可以任意縮放
cv.imshow('input_image', src)
threshold_demo(src)
local_threshold(src)
custom_threshold(src)
cv.waitkey(0)
cv.destroyallwindows()
現在我們分析一下**:
①:全域性閾值
在這裡我們使用的是threshold函式,函式原型為
threshold(src, thresh, maxval, type[, dst])src引數表示輸入影象(多通道,8位或32位浮點)。
thresh引數表示閾值。
maxval引數表示與thresh_binary和thresh_binary_inv閾值型別一起使用設定的最大值。
type引數表示閾值型別。
retval引數表示返回的閾值。若是全域性固定閾值演算法,則返回thresh引數值。若是全域性自適應閾值演算法,則返回自適應計算得出的合適閾值。
dst引數表示輸出與src相同大小和型別以及相同通道數的影象。
閾值型別圖示:
②:區域性閾值
opencv的adaptivethreshold函式進行區域性閾值。
函式原型為:adaptivethreshold(src, maxvalue, adaptivemethod, thresholdtype, blocksize, c[, dst])
src引數表示輸入影象(8位單通道影象)。三:執行結果maxvalue引數表示使用 thresh_binary 和 thresh_binary_inv 的最大值.
adaptivemethod引數表示自適應閾值演算法,平均 (adaptive_thresh_mean_c)或高斯(adaptive_thresh_gaussian_c)。
thresholdtype引數表示閾值型別,必須為thresh_binary或thresh_binary_inv的閾值型別。
blocksize引數表示塊大小(奇數且大於1,比如3,5,7........ )。
c引數是常數,表示從平均值或加權平均值中減去的數。 通常情況下,這是正值,但也可能為零或負值。
圖為不同的閾值處理方式
四:引用資料
1:opencv—固定閾值門限分割cv::threshold
csdn-專業it技術社群-登入blog.csdn.net
2:閾值化操作——cv::threshold()與cv::adaptivethreshold()詳解
csdn-專業it技術社群-登入blog.csdn.net
資料結構與演算法 十二 二分查詢和插值查詢
有乙個遊戲最能體現二分查詢的思路 我在紙上已經寫好了100以內的正整數數字,然後請你猜,問最多幾次可以猜出來?這個遊戲的解法就是每次猜數後折取一半,我們把這種每次取中間記錄查詢的方法叫做折半查詢,或二分查詢。二分查詢 binary earch 也稱為折半查詢。它的前提是線性表中的記錄必須是關鍵碼有序...
opencv python筆記 閾值二值化
cv2.threshold img,threshold,maxval,type img,就是原影象,原影象應是灰度圖。threshold,就是用來對畫素值分類的閾值。maxval,就是當畫素值高於 有時是小於 閾值時應該被賦予的新的畫素值。函式有兩個返回值,第乙個為retval,我們後面會解釋。第二...
機器學習 資料預處理之二值化
用0和1來表示樣本矩陣中相對於某個給定閾值高於或者低於它的元素 作用 一般用在影象處理 將影象分成黑和白 常用的方法就是設定乙個閾值t,用t將影象的資料分成兩部分 大於t的畫素群和小於t的畫素群 import numpy as np sample np.array 2,4,5,1 3 1,7 2 6...