二值化 CV學習筆記(十二) 二值化操作

2021-10-14 20:36:41 字數 3278 閱讀 7411

一:影象二值化的基本原理

影象二值化就是將影象上的畫素點的灰度值設定為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...