国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理)

這篇具有很好參考價值的文章主要介紹了OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

閾值處理

一.threshold函數(shù)

1.二值化閾值處理(cv2.THRESH_BINARY)

2.反二值化閾值處理( cv2.THRESH_BINARY_INV)

3.截斷閾值化處理(cv2.THRESH_TRUNC)

4.超閾值零處理(cv2.THRESH_TOZERO_INV)

5.低閾值零處理(cv2.THRESH_TOZERO)

?二.自適應(yīng)閾值處理

?三.Otsu處理


閾值處理

閾值處理是指剔除圖像內(nèi)像素高于一定值或低于一定值的像素點。例如,設(shè)定閾值為127,然后:

1.將圖像內(nèi)所有像素值大于127的像素點的值設(shè)為255

2.將圖像內(nèi)所有像素值小于或等于127的像素點的值設(shè)為0

通過上述方式能夠得到一幅二值圖像。

一.threshold函數(shù)

OpenCV3.0使用cv2.threshold函數(shù)進行閾值化處理,該函數(shù)的語法格式為:

retval, dst = cv2.threshold(src, thresh, maxval, type)

式中:

retval代表返回的閾值。

dst代表閾值分割結(jié)果圖像,與原始圖像具有相同的大小和類型。

src代表要進行閾值分割的圖像,可以是多通道的,8位或32位浮點型數(shù)值。

thresh代表要設(shè)定的閾值。

maxval代表當(dāng)type參數(shù)為THRESH_BINARY或者THRESH_BINARY_INV類型時,需要設(shè)定的最大值。

type代閾值分割的類型(cv2.THRESH_BINARY,? cv2.THRESH_BINARY_INV,? cv2.THRESH_TRUNC,??cv2.THRESH_TOZERO_INV,??cv2.THRESH_TOZERO,??cv2.THRESH_MASK,?cv2.THRESH_OTSU,?cv2.THRESH_TRIANGLE)。

1.二值化閾值處理(cv2.THRESH_BINARY)

二值化閾值處理會將原始圖像處理為僅有兩個值的二值圖像,其針對的像素點的處理方式為:

1)對于灰度值大于閾值thresh的像素點,將其灰度值設(shè)定為最大值。

2)對于灰度值小于或等于閾值thresh的像素點,將其灰度值設(shè)定為0。

使用函數(shù)cv2.threshold()對數(shù)組進行二值化閾值處理,觀察處理結(jié)果:

import cv2
import numpy as np
# 使用函數(shù)cv2.threshold()對數(shù)組進行二值化閾值處理
img = np.random.randint(0, 256, size=[4,5], dtype=np.uint8)
t, rst = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
print("img=\n", img)
print("t=", t)
print("rst=", rst)

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

使用函數(shù)cv2.threshold()對圖像進行二值化閾值處理,觀察處理結(jié)果:

import cv2
# 使用函數(shù)cv2.threshold()對圖像進行二值化閾值處理
img = cv2.imread("../imgs/girl2.png")
t, rst = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow("img", img)
cv2.imshow("rst", rst)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

左圖是原始圖像,右圖是二值化閾值處理結(jié)果。?

2.反二值化閾值處理( cv2.THRESH_BINARY_INV)

反二值化閾值處理的結(jié)果也是僅有兩個值的二值圖像,與二值化閾值處理的區(qū)別在于,二者對像素值的處理方式不同。反二值化閾值處理針對像素點的處理方式為:

1)對于灰度值大于閾值的像素點,將其值設(shè)定為0。

2)對于灰度值小于或等于閾值的像素點,將其值設(shè)為255。

使用函數(shù)cv2.threshold()對數(shù)組進行反二值化閾值處理,觀察處理結(jié)果:

import cv2
import numpy as np
# 使用函數(shù)cv2.threshold()對數(shù)組進行反二值化閾值處理
img = np.random.randint(0, 256, size=[4,5], dtype=np.uint8)
t, rst = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
print("img=\n", img)
print("t=", t)
print("rst=", rst)

?OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

使用函數(shù)cv2.threshold()對圖像進行反二值化閾值處理,觀察處理結(jié)果:

import cv2
# 使用函數(shù)cv2.threshold()對圖像進行反二值化閾值處理
img = cv2.imread("../imgs/02.jpg")
t, rst = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("img", img)
cv2.imshow("rst", rst)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

?其中,左圖為原圖,右圖為反二值化閾值處理結(jié)果。

3.截斷閾值化處理(cv2.THRESH_TRUNC)

截斷閾值化處理會將圖像中大于閾值的像素點設(shè)為值設(shè)定為閾值,小于或等于該閾值的像素點的值保持不變。

1)對于像素值大于127的像素點,其像素值被設(shè)定為127。

2)對于像素值小于或等于127的像素點,其像素值保持改變。

使用函數(shù)cv2.threshold()對數(shù)組進行截斷閾值化處理,觀察處理結(jié)果:

import cv2
import numpy as np
# 使用函數(shù)cv2.threshold()對數(shù)組進行截斷閾值化處理
img = np.random.randint(0, 256, size=[4,5], dtype=np.uint8)
t, rst = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
print("img=\n", img)
print("t=", t)
print("rst=", rst)

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

?使用函數(shù)cv2.threshold()對圖像進行截斷閾值化處理,觀察處理結(jié)果:

import cv2
# 使用函數(shù)cv2.threshold()對圖像進行截斷閾值化處理
img = cv2.imread("../imgs/girl2.png")
t, rst = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
cv2.imshow("img", img)
cv2.imshow("rst", rst)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

左圖為原始圖像,右圖為截斷閾值化處理結(jié)果

4.超閾值零處理(cv2.THRESH_TOZERO_INV)

超閾值零處理會將圖像中大于閾值的像素點的值處理為0,小于或等于該閾值的像素點的值保持不變。即先選定一個閾值,然后對圖像做如下處理:

1)對于像素值大于閾值的像素點,其像素值將被處理為0.

2)對于像素值小于或等于閾值的像素點,其像素值保持不變。

使用函數(shù)cv2.threshold()對數(shù)組進行超閾值零處理,觀察處理結(jié)果:

import cv2
import numpy as np
# 使用函數(shù)cv2.threshold()對數(shù)組進行超閾值零處理
img = np.random.randint(0, 256, size=[4,5], dtype=np.uint8)
t, rst = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)
print("img=\n", img)
print("t=", t)
print("rst=", rst)

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

使用函數(shù)cv2.threshold()對圖像進行超閾值零處理,觀察處理結(jié)果:

import cv2
# 使用函數(shù)cv2.threshold()對圖像進行超閾值零處理
img = cv2.imread("../imgs/girl2.png")
t, rst = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)
cv2.imshow("img", img)
cv2.imshow("rst", rst)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

?左圖為原始圖像,右圖為超閾值零處理的結(jié)果。

5.低閾值零處理(cv2.THRESH_TOZERO)

低閾值處理會將圖像中小于或等于閾值的像素點的值處理為0,大于閾值的像素點的值保持不變。

使用函數(shù)cv2.threshold()對數(shù)組進行低閾值零處理,觀察處理結(jié)果:

import cv2
import numpy as np
# 使用函數(shù)cv2.threshold()對數(shù)組進行低閾值零處理
img = np.random.randint(0, 256, size=[4,5], dtype=np.uint8)
t, rst = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)
print("img=\n", img)
print("t=", t)
print("rst=", rst)

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

?使用函數(shù)cv2.threshold()對圖像進行低閾值零處理,觀察處理結(jié)果:

import cv2
# 使用函數(shù)cv2.threshold()對圖像進行低閾值零處理
img = cv2.imread("../imgs/girl2.png")
t, rst = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)
cv2.imshow("img", img)
cv2.imshow("rst", rst)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

?二.自適應(yīng)閾值處理

對于色彩均衡的圖像,直接使用一個閾值就能完成對圖像的閾值化處理。但是,有時,圖像的色彩是不均衡的,此時如果只使用一個閾值,就無法得到清晰有效的閾值分割結(jié)果圖像。

有一種改進的閾值處理技術(shù),其使用變化的閾值完成對圖像的閾值處理,這種技術(shù)被稱為自適應(yīng)閾值處理。在進行閾值處理時,自適應(yīng)閾值處理的方式通過計算每個像素點周圍臨近區(qū)域的加權(quán)平均值獲得閾值,并使用該閾值對當(dāng)前像素點進行處理。與普通的閾值處理方法相比,自適應(yīng)閾值處理能夠更好地處理明暗差異較大的圖像。

OpenCV提供了函數(shù)cv2.adaptiveThreshold來實現(xiàn)自適應(yīng)閾值處理,該函數(shù)的語法格式為:

dst = cv.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

式中:

dst代表自適應(yīng)閾值處理結(jié)果。

src代表要進行處理的原始圖像。需要注意的是,該圖像必須是8位單通道的圖像。

maxValue代表最大值。

adaptiveMethod代表自適應(yīng)的方法。

thresholdType代表閾值處理方式,該值必須是cv2.THRESH_BINARY或者 cv2.THRESH_BINARY_INV中的一個。

blockSize代表塊大小。表示一個像素在計算其閾值時所使用的領(lǐng)域尺寸,通常為3、5、7等。

C是常量。

函數(shù)cv2.adaptiveThreshold()根據(jù)參數(shù)adaptiveMethod來確定自適應(yīng)閾值的計算方法,函數(shù)包含cv2.ADAPTIVE_THRESH_MEAN_C和cv2.ADAPTIVE_THRESH_GAUSSIAN_C兩種不同的方法。這兩種方法都是逐個計算像素地計算自適應(yīng)閾值,自適應(yīng)閾值等于每個像素由參數(shù)blockSize所指定領(lǐng)域的加權(quán)平均值減去常量C。兩種不同的方法在計算領(lǐng)域的加權(quán)平均值時所采用的方式不同:

cv2.ADAPTIVE_THRESH_MEAN_C:領(lǐng)域所有像素點的權(quán)重值是一致。

cv2.ADAPTIVE_THRESH_GAUSSIAN_C:與領(lǐng)域各個像素點到中心點的距離有關(guān),通過高斯方程得到各個點的權(quán)重值。

對一幅圖像分別使用二值化閾值函數(shù)cv2.threshold()和自適應(yīng)閾值函數(shù)cv2.adaptiveThreshold()進行處理,觀察處理結(jié)果的差異:

import cv2
img = cv2.imread("../imgs/girl2.png", 0)
t1, thd = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
athdMEAN = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 3)
athdGAUS = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 3)
cv2.imshow("img", img)
cv2.imshow("thd", thd)
cv2.imshow("athdMEAN", athdMEAN)
cv2.imshow("athdGAUS", athdGAUS)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

從左往右依次是原圖、二值化閾值處理結(jié)果、cv2.ADAPTIVE_THRESH_MEAN_C處理結(jié)果、cv2.ADAPTIVE_THRESH_GAUSSIAN_C處理結(jié)果。

?三.Otsu處理

在使用函數(shù)cv2.threshold()進行閾值處理時,需要自定義一個閾值,并以此閾值作為圖像閾值處理的依據(jù)。通常情況下處理的圖像都是色彩均衡的,這時直接將閾值設(shè)為127是比較合適的。

但是,有時圖像灰度級的分布是不均衡的,如果此時還將閾值設(shè)為127,那么閾處理的結(jié)果就是失敗的。

簡而言之,Otsu方法會遍歷所有可能閾值,從而找到最佳的閾值。在使用Otsu方法時,要把閾值設(shè)為0。此時的函數(shù)cv2.threshold()會自動尋找最優(yōu)閾值,并將該閾值返回。

t, otsu = cv2.threshold(img, 0, 255, cv2>THRESH_BINARY + cv2.THRESH_OTSU)

與普通閾值分割的不同之處在于:

參數(shù)type增加了一個參數(shù)值“cv2.THRESH_OTSU”。

設(shè)定的閾值為0。

返回值t是Otsu方法計算得到并使用的最優(yōu)閾值。

import cv2
import numpy as np

img = np.zeros((5, 5), dtype=np.uint8)
img[0:6, 0:6] = 123
img[2:6, 2:6] = 126
print("img=\n", img)
t1, thd = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
print("thd=", thd)
t2, otsu = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
print("otsu=", otsu)

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

分別對一幅圖像進行普通的二值化閾值處理和Otsu閾值處理,觀察處理結(jié)果的差異:

import cv2
img = cv2.imread("../imgs/02.jpg", 0)
t1, thd = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
t2, otsu = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow("img", img)
cv2.imshow("thd", thd)
cv2.imshow("otsu", otsu)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理),OpenCV,opencv,人工智能,計算機視覺

?從左往右依次是原圖、普通二值化閾值處理結(jié)果和Otsu處理結(jié)果。文章來源地址http://www.zghlxwxcb.cn/news/detail-516961.html

到了這里,關(guān)于OpenCV閾值處理(threshold函數(shù)、自適應(yīng)閾值處理、Otsu處理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • opencv-28 自適應(yīng)閾值處理-cv2.adaptiveThreshold()

    opencv-28 自適應(yīng)閾值處理-cv2.adaptiveThreshold()

    對于色彩均衡的圖像,直接使用一個閾值就能完成對圖像的閾值化處理。但是,有時圖像的色彩是不均衡的,此時如果只使用一個閾值,就無法得到清晰有效的閾值分割結(jié)果圖像。 有一種改進的閾值處理技術(shù),其使用變化的閾值完成對圖像的閾值處理,這種技術(shù)被稱為自適應(yīng)

    2024年02月15日
    瀏覽(21)
  • 10- OpenCV:基本閾值操作(Threshold)

    10- OpenCV:基本閾值操作(Threshold)

    目錄 1、圖像閾值 2、閾值類型 3、代碼演示 1、圖像閾值 (1)圖像閾值(threshold)含義:是將圖像中的像素值劃分為不同類別的一種處理方法。通過設(shè)定一個特定的閾值,將像素值與閾值進行比較,根據(jù)比較結(jié)果將像素分為兩個或多個類別。 ????????閾值 是什么?簡單點

    2024年01月18日
    瀏覽(31)
  • OpenCV基礎(chǔ)補充自適應(yīng)閾值及圖像金字塔

    OpenCV基礎(chǔ)補充自適應(yīng)閾值及圖像金字塔

    對于OpenCV知識點還有很多,基礎(chǔ)的大家可以參考前面幾節(jié)。 OpenCv基礎(chǔ)之繪圖及幾何變換實例 OpenCV基礎(chǔ)操作之圖像的形態(tài)學(xué)運算 OpenCV基礎(chǔ)操作之邊界填充、圖像閾值以及圖像平滑處理 OpenCV基礎(chǔ)之邊緣檢測與輪廓描繪 OpenCV基礎(chǔ)之模板匹配與直方圖 OpenCV圖像處理之傅里葉變換

    2024年02月02日
    瀏覽(36)
  • opencv-29 Otsu 處理(圖像分割)

    opencv-29 Otsu 處理(圖像分割)

    Otsu 處理是一種用于圖像分割的方法,旨在自動找到一個閾值,將圖像分成兩個類別:前景和背景。這種方法最初由日本學(xué)者大津展之(Nobuyuki Otsu)在 1979 年提出 在 Otsu 處理中,我們通過最小化類別內(nèi)方差或最大化類別間方差的方式來確定最佳閾值。具體步驟如下: 首先,

    2024年02月14日
    瀏覽(18)
  • 【C++ OpenCV】閾值二值化、閾值反二值化、截斷、閾值取零、閾值反取零、自適應(yīng)閾值使用方法以及時機

    【C++ OpenCV】閾值二值化、閾值反二值化、截斷、閾值取零、閾值反取零、自適應(yīng)閾值使用方法以及時機

    閾值:簡單來說就是一把分割圖像像素的標(biāo)尺,在二值化處理中有固定閾值和自適應(yīng)閾值兩種形式。 那么什么時候用固定閾值,什么時候使用自適應(yīng)閾值呢? 答:當(dāng)圖像 質(zhì)量較好 ,且目標(biāo)和背景容易區(qū)分時,可以采用固定閾值 當(dāng)圖像 質(zhì)量差 ,且有 陰影過度 ,雖然使用大

    2024年02月07日
    瀏覽(25)
  • 圖像處理之閾值分割[全局閾值、Otsu閾值和迭代式閾值分割]

    圖像處理之閾值分割[全局閾值、Otsu閾值和迭代式閾值分割]

    一、閾值分割基本定義 閾值分割技術(shù)是最經(jīng)典和流行的圖像分割方法之一,也是最簡單的一種圖像分割方法。此技術(shù) 關(guān)鍵在于尋找適當(dāng)?shù)幕叶乳撝?,通常是根?jù)圖像的灰度直方圖來選取。它是用一個或幾個閾值將圖像的灰度級分為幾個部分,認(rèn)為屬于同一個部分的像素是同

    2024年02月03日
    瀏覽(23)
  • python-opencv第四期:threshold函數(shù)詳解

    python-opencv第四期:threshold函數(shù)詳解

    概要: 眾 嗦粥汁 所周知,在如今計算機視覺( Computer Version ?short for CV)是人工智能與機器人技術(shù)發(fā)展的一個重大研究方向,而 opencv 作為一個專門為計算機視覺編程提供技術(shù)與函數(shù)支持的第三方庫,自然是一個需要重點研究的內(nèi)容。 ? ? ? ? ? ? 本期所要介紹的函數(shù)是o

    2024年02月05日
    瀏覽(20)
  • OpenCV-Python學(xué)習(xí)(10)—— OpenCV 圖像二值化處理(cv.threshold)

    OpenCV-Python學(xué)習(xí)(10)—— OpenCV 圖像二值化處理(cv.threshold)

    1. 學(xué)習(xí)目標(biāo) 理解圖像的分類,不同類型的圖像的區(qū)別; 對圖像進行二值化處理,對【 cv.threshold 】函數(shù)的理解。 2. 圖像分類 2.1 不同類型圖像說明 按照顏色對圖像進行分類,可以分為二值圖像、灰度圖像和彩色圖像。 二值圖像: 只有黑色和白色兩種顏色的圖像。 每個像素

    2024年02月03日
    瀏覽(103)
  • Matlab圖像處理-最大類間方差閾值選擇法(Otsu)

    Matlab圖像處理-最大類間方差閾值選擇法(Otsu)

    基本思想 最大類間方差閾值選擇法又稱為 Otsu 算法,該算法是在灰度直方圖的基礎(chǔ)上用最小二乘法原理推導(dǎo)出來的,具有統(tǒng)計意義上的最佳分割閾值。它的基本原理是以最佳閾值將圖像的灰度直方圖分割成兩部分,使兩部分之間的方差取得最大值,即分離性最大。 示例代碼

    2024年02月09日
    瀏覽(21)
  • 入門OpenCV:圖像閾值處理

    入門OpenCV:圖像閾值處理

    圖像閾值是一種簡單、高效的圖像分割方法,目的是將圖像轉(zhuǎn)換成二值圖像。這個過程涉及比較像素值和閾值,根據(jù)比較結(jié)果來確定每個像素點的狀態(tài)(前景或背景)。圖像閾值在處理二維碼、文本識別、物體跟蹤等領(lǐng)域中非常有用。本博客旨在簡介OpenCV中的閾值處理方法,

    2024年02月19日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包