6.1 闕值處理 threshold函數(shù)

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

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

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

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

式中:

retval 代表返回的閾值
dst 代表值分割結(jié)果圖像,與原始圖像具有相同的大小和類型
src 代表要進(jìn)行閾值分割的圖像,可以是多通道的,8 位或 32 使浮點(diǎn)型數(shù)值
thresh 代表要設(shè)定的闕值
maxval 代表當(dāng) type 參數(shù)為 THRESH_BINARY 或者 THRESH_BINARY_INV類型,需要設(shè)定的最大值
type 代表值分割的類型,具體類型值如表 6-1 所示

47f412c30d413135d275945c1c069a5.jpg

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

二值化閾值處理會(huì)將原始圖像處理為僅有兩個(gè)值的二值圖像灶轰,其示意圖如圖谣沸,其針對(duì)像素點(diǎn)的處理方式:

1.對(duì)于灰度值大于闊值 thresh 的像素點(diǎn),將其灰度值設(shè)定為最大值。
2.對(duì)于灰度值小于或等于闕值 thresh 的像素點(diǎn),將其灰度值設(shè)定為0

059e912beea9587fdd0d10d3df0bec4.jpg

如果使用表達(dá)式表示,其目標(biāo)值的產(chǎn)生規(guī)則為:

dst(x,y) = \begin{cases} maxval & src(x,y) >thresh \\ 0 & 其他情況 \end{cases}

式中, thresh 是選定的特定閾值

在8 位圖像中,最大值是 255.因此,在對(duì)8 位灰度圖像進(jìn)行二值化時(shí),如果將閾值設(shè)定為 127,那么
1.所有大于 127 的像素點(diǎn)會(huì)被處理為 255
2.其余值會(huì)被處理為0
為了方便,在后續(xù)說(shuō)明中,我們都以8 位圖像為例,即像素值最大值為 255

【例 6.1】使用函數(shù) cv2.threshold() 對(duì)數(shù)組進(jìn)行二值化閱值處理,觀察處理結(jié)果

根據(jù)題目要求,編寫代碼如下:

import cv2
import numpy as np
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=\n",rst)

img=
[[123 138 81 99 19]
[146 154 36 16 251]
[166 206 237 59 26]
[117 74 53 16 188]]
t= 127.0
rst=
[[ 0 255 0 0 0]
[255 255 0 0 255]
[255 255 255 0 0]
[ 0 0 0 0 255]]

【例 6.2】使用函數(shù) cv2.threshold() 對(duì)圖像進(jìn)行二值化闊值處理


import cv2
img=cv2.imread("C:\\Users\\Administrator\\Desktop\\opencv\\lena.bmp")
t,rst=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
cv2.imshow("img",img)
cv2.imshow("rst",rst)
cv2.waitKey()
cv2.destroyAllWindows()

1562250464(1).png

6.1.2 反二值化閾值處理 cv2.THRESH_BINARY_INV

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

1.對(duì)于灰度值大于閾值的像素點(diǎn),將其值設(shè)定為0
2.對(duì)于灰度值小于或等于閾值的像素點(diǎn),將其值設(shè)定為 255

反二值化閾值處理方式的示意圖如圖 6-5 所示

d0d9d6b8758057c99b9981e496bf886.jpg

如果使用表達(dá)式來(lái)表示,其目標(biāo)值的產(chǎn)生規(guī)則為

dst(x,y) = \begin{cases} 0 & src(x,y) >thresh \\ maxval & 其他情況 \end{cases}

式中, thresh 是選定的閾值

【例 6.3】使用函數(shù) cv2.threshold() 對(duì)數(shù)組進(jìn)行反二值化閾值處理,觀察處理結(jié)果

根據(jù)題目要求,編寫代碼如下:


import cv2
import numpy as np
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=\n",rst)

img=
[[ 43 19 1 184 114]
[199 195 246 22 148]
[157 162 26 213 104]
[232 172 47 72 123]]
t= 127.0
rst=
[[255 255 255 0 255]
[ 0 0 0 255 0]
[ 0 0 255 0 255]
[ 0 0 255 255 255]]

【例 6.4】使用函數(shù)cv2.threshold() 對(duì)圖像進(jìn)行反二值化閱值處理

根據(jù)題目要求,編寫代碼如下


import cv2
img=cv2.imread("C:\\Users\\Administrator\\Desktop\\opencv\\lena.bmp")
t,rst=cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
cv2.imshow("img",img)
cv2.imshow("rst",rst)
cv2.waitKey()
cv2.destroyAllWindows()
1562250900(1).png

6.1.3 反二值化閾值處理 cv2.THRESH_BINARY_INV

截?cái)嚅撝祷幚頃?huì)將圖像中大于閾值的像素點(diǎn)的值設(shè)定為閾值,小于或等于該闊值的像素點(diǎn)的值保持不變笋颤。這種處理方式的示意圖如圖 6-7 所示

ae021f03715f7fc9fd1a5fe0a66302e.jpg

例如,閾值選取為 127,則截?cái)嚅撝祷幚頃r(shí)

1.對(duì)于像素值大于 127 的像素點(diǎn),其像素值將被設(shè)定為 127
2.對(duì)于像素值小于或等于 127 的像素點(diǎn),其像素值將保持不變

如果使用表達(dá)式表示,那么其目標(biāo)值的產(chǎn)生規(guī)則為

dst(x,y) = \begin{cases} maxval & src(x,y) >thresh \\ 0& 其他情況 \end{cases}

【例 6.5】使用函數(shù) cv2.threshold() 對(duì)數(shù)組進(jìn)行截?cái)嚅y值化處理,觀察處理結(jié)果

根據(jù)題目要求,編寫代碼如下:

import cv2
import numpy as np
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=\n",rst)

img=
[[ 68 136 250 6 91]
[141 6 41 199 45]
[244 56 19 80 163]
[155 32 147 231 35]]
t= 127.0
rst=
[[ 68 127 127 6 91]
[127 6 41 127 45]
[127 56 19 80 127]
[127 32 127 127 35]]

【例 6.6 】使用函數(shù) cv2.threshold() 對(duì)圖像進(jìn)行截?cái)嚅y值化處理,觀察處理結(jié)果

import cv2
img=cv2.imread("C:\\Users\\Administrator\\Desktop\\opencv\\lena.bmp")
t,rst=cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
cv2.imshow("img",img)
cv2.imshow("rst",rst)
cv2.waitKey()
cv2.destroyAllWindows()


1562251306(1).png

6.1.4 超閾值零處理(cV2. THRESH_TOZERO_INV)

超閾值零處理會(huì)將圖像中大于閾值的像素點(diǎn)的值處理為 0,小于或等于該閾值的像素值保持不變乳附。即先選定一個(gè)閾值,然后對(duì)圖像做如下處理:

1.對(duì)于像素值大于閾值的像素點(diǎn),其像素值將被處理為0
2.對(duì)于像素值小于或等于閾值的像素點(diǎn),其像素值將保持不變。

超閱值零處理的工作原理如圖 6-9 所示

d5f5482679552742a66fbda7b6c680b.jpg

例如,闕值選取為 127,則
1.對(duì)于像素值大于 127 的像素點(diǎn),其值將被設(shè)定為0
2.對(duì)于像素值小于或等于 127 的像素點(diǎn),其值將保持不變

如果使用表達(dá)式表示,其目標(biāo)值的產(chǎn)生規(guī)則為
dst(x,y) = \begin{cases} 0 & src(x,y) >thresh \\ src(x,y) & 其他情況 \end{cases}

【例 6.7】使用函數(shù) cv2.threshold() 對(duì)數(shù)組進(jìn)行超閾值零處理,觀察處理結(jié)果

根據(jù)題目要求,編寫代碼如下

import cv2
import numpy as np
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=\n",rst)

img=
[[ 77 176 66 171 223]
[218 158 82 117 74]
[175 146 110 155 82]
[ 84 58 79 2 52]]
t= 127.0
rst=
[[ 77 0 66 0 0]
[ 0 0 82 117 74]
[ 0 0 110 0 82]
[ 84 58 79 2 52]]

【例 6.8】使用函數(shù) cv2.threshold() 對(duì)圖像進(jìn)行超值零處理

根據(jù)題目要求,編寫代碼如下:

import cv2
img=cv2.imread("C:\\Users\\Administrator\\Desktop\\opencv\\lena.bmp")
t,rst=cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
cv2.imshow("img",img)
cv2.imshow("rst",rst)
cv2.waitKey()
cv2.destroyAllWindows()

1562252569(1).png

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

低閾值零處理會(huì)將圖像中小于或等于閱值的像素點(diǎn)的值處理為 0,大于閾值的像素點(diǎn)的值保持不變,即先選定一個(gè)閱值,然后對(duì)圖像做如下處理

1.對(duì)于像素值大于像素點(diǎn)的值的像素點(diǎn),其值將保持不變
2.對(duì)于像素值小于或等于值的像素點(diǎn),其值將被處理為0

其示意圖如圖 6-11 所示

98a84c5c354b36642c526f760b01969.jpg

例如,閱值選取為 127,則:
1.對(duì)于像素值大于 127 的像素點(diǎn),其像素值將保持不變
2.對(duì)于像素值小于或等于 127 的像素點(diǎn),其像素值將被設(shè)定為0

如果使用表達(dá)式表示,其目標(biāo)值的產(chǎn)生規(guī)則為

dst(x,y) = \begin{cases} src(x,y) & src(x,y) >thresh \\ 0 & 其他情況 \end{cases}

【例 6.9】使用函數(shù) cv2.threshold() 對(duì)數(shù)組進(jìn)行低闕值零處理,觀察處理結(jié)果

根據(jù)題目要求,編寫代碼如下:


import cv2
import numpy as np
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=\n",rst)

img=
[[211 103 158 2 20]
[183 62 158 139 145]
[ 3 154 130 10 103]
[145 82 194 200 122]]
t= 127.0
rst=
[[211 0 158 0 0]
[183 0 158 139 145]
[ 0 154 130 0 0]
[145 0 194 200 0]]

【例 6.10】使用函數(shù) cv2.threshold() 對(duì)圖像進(jìn)行低閾值零處理

根據(jù)題目要求,編寫代碼如下:


import cv2
img=cv2.imread("C:\\Users\\Administrator\\Desktop\\opencv\\lena.bmp")
t,rst=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
cv2.imshow("img",img)
cv2.imshow("rst",rst)
cv2.waitKey()
cv2.destroyAllWindows()
1562253052(1).png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伴澄,一起剝皮案震驚了整個(gè)濱河市赋除,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌非凌,老刑警劉巖举农,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異敞嗡,居然都是意外死亡颁糟,警方通過(guò)查閱死者的電腦和手機(jī)航背,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)棱貌,“玉大人玖媚,你說(shuō)我怎么就攤上這事〖耄” “怎么了最盅?”我有些...
    開(kāi)封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵突雪,是天一觀的道長(zhǎng)起惕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)咏删,這世上最難降的妖魔是什么惹想? 我笑而不...
    開(kāi)封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮督函,結(jié)果婚禮上嘀粱,老公的妹妹穿的比我還像新娘。我一直安慰自己辰狡,他們只是感情好锋叨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著宛篇,像睡著了一般娃磺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叫倍,一...
    開(kāi)封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天偷卧,我揣著相機(jī)與錄音,去河邊找鬼吆倦。 笑死听诸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚕泽。 我是一名探鬼主播晌梨,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼须妻!你這毒婦竟也來(lái)了仔蝌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤璧南,失蹤者是張志新(化名)和其女友劉穎掌逛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體司倚,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豆混,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年篓像,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皿伺。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡员辩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸵鸥,到底是詐尸還是另有隱情奠滑,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布妒穴,位于F島的核電站宋税,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏讼油。R本人自食惡果不足惜杰赛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矮台。 院中可真熱鬧乏屯,春花似錦、人聲如沸瘦赫。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)确虱。三九已至含友,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝉娜,已是汗流浹背唱较。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留召川,地道東北人南缓。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像荧呐,于是被迫代替她去往敵國(guó)和親汉形。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348