国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

opencv python 圖像二值化/簡(jiǎn)單閾值化/大津閾值法

luoyibu / 3292人閱讀

摘要:對(duì)于非雙峰圖像,二值化不準(zhǔn)確。如果未使用閾值法,則與之前使用的閾值相同在第一種情況下,將全局閾值應(yīng)用為值在第二種情況下,直接應(yīng)用了的閾值在第三種情況下,使用高斯內(nèi)核過(guò)濾圖像以消除噪聲,然后應(yīng)用閾值處理代碼

Image Thresholding

1簡(jiǎn)單的閾值化

cv2.threshold第一個(gè)參數(shù)是源圖像,它應(yīng)該是灰度圖像. 第二個(gè)參數(shù)是用于對(duì)像素值進(jìn)行分類(lèi)的閾值, 第三個(gè)參數(shù)是maxVal,它表示如果像素值大于(有時(shí)小于)閾值則要給出的值. OpenCV提供不同類(lèi)型的閾值,它由函數(shù)的第四個(gè)參數(shù)決定. 不同的類(lèi)型是:

cv2.THRESH_BINARY 如果 src(x,y)>threshold ,dst(x,y) = max_value; 否則,dst(x,y)=0
cv.THRESH_BINARY_INV 如果 src(x,y)>threshold,dst(x,y) = 0; 否則,dst(x,y) = max_value
cv.THRESH_TRUNC 如果 src(x,y)>threshold,dst(x,y) = max_value; 否則dst(x,y) = src(x,y)
cv.THRESH_TOZERO 如果src(x,y)>threshold,dst(x,y) = src(x,y) ; 否則 dst(x,y) = 0
cv.THRESH_TOZERO_INV 如果 src(x,y)>threshold,dst(x,y) = 0 ; 否則dst(x,y) = src(x,y)

代碼

import cv2
import numpy as np
import matplotlib.pylab  as plt

img = cv2.imread("img.jpg",0)
ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret,thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret,thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)

titles = ["Original Image","BINARY","BINARY_INV","TRUNC","TOZERO","TOZERO_INV"]
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]

for i in range(6):
    plt.subplot(2,3,i+1),plt.imshow(images[i],"gray")
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])

plt.show()

2自適應(yīng)閾值化

圖像在不同區(qū)域具有不同照明條件時(shí),應(yīng)進(jìn)行自適應(yīng)閾值處理.因此,我們?yōu)橥粓D像的不同區(qū)域獲得不同的閾值,并且它為具有不同照明的圖像提供了更好的結(jié)果.
cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst])
adaptiveMethod:決定如何計(jì)算閾值

cv2.ADAPTIVE_THRESH_MEAN_C:閾值是鄰域的平均值

cv2.ADAPTIVE_THRESH_GAUSSIAN_C:閾值是鄰域值的加權(quán)和,其中權(quán)重是高斯窗口

blockSize:決定了鄰域的大小
C:從計(jì)算的平均值或加權(quán)平均值中減去的常數(shù)

代碼

import cv2
import numpy as np
import matplotlib.pylab  as plt

img = cv2.imread("img.jpg",0)
img = cv2.medianBlur(img,5)

ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,
            cv2.THRESH_BINARY,11,2)
th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
            cv2.THRESH_BINARY,11,2)

titles = ["Original Image", "Global Thresholding (v = 127)",
            "Adaptive Mean Thresholding", "Adaptive Gaussian Thresholding"]
images = [img, th1, th2, th3]

for i in range(4):
    plt.subplot(2,2,i+1),plt.imshow(images[i],"gray")
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
plt.show()

[lz是密集恐懼癥,有點(diǎn)不忍直視……]

3 大津閾值法

根據(jù)雙峰圖像的圖像直方圖自動(dòng)計(jì)算閾值。 (對(duì)于非雙峰圖像,二值化不準(zhǔn)確。)

使用cv.threshold()但是傳遞了一個(gè)額外的標(biāo)志v.THRESH_OTSU.對(duì)于閾值,只需傳遞零.然后算法找到最佳閾值并返回為第二個(gè)輸出retVal。如果未使用Otsu閾值法,則retVal與之前使用的閾值相同.

在第一種情況下,將全局閾值應(yīng)用為值127.在第二種情況下,直接應(yīng)用了Otsu的閾值.在第三種情況下,使用5x5高斯內(nèi)核過(guò)濾圖像以消除噪聲,然后應(yīng)用Otsu閾值處理.
代碼

import cv2
import numpy as np
import matplotlib.pylab  as plt

img = cv2.imread("img.jpg",0)
# global thresholding
ret1,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)

# Otsu"s thresholding
ret2,th2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

# Otsu"s thresholding after Gaussian filtering
blur = cv2.GaussianBlur(img,(5,5),0)
ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

# plot all the images and their histograms
images = [img, 0, th1,
          img, 0, th2,
          blur, 0, th3]
titles = ["Original Noisy Image","Histogram","Global Thresholding (v=127)",
          "Original Noisy Image","Histogram","Otsu"s Thresholding",
          "Gaussian filtered Image","Histogram","Otsu"s Thresholding"]

for i in range(3):
    plt.subplot(3,3,i*3+1),plt.imshow(images[i*3],"gray")
    plt.title(titles[i*3]), plt.xticks([]), plt.yticks([])
    plt.subplot(3,3,i*3+2),plt.hist(images[i*3].ravel(),256)
    plt.title(titles[i*3+1]), plt.xticks([]), plt.yticks([])
    plt.subplot(3,3,i*3+3),plt.imshow(images[i*3+2],"gray")
    plt.title(titles[i*3+2]), plt.xticks([]), plt.yticks([])

plt.show()

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/41990.html

相關(guān)文章

  • 用JavaScript來(lái)計(jì)算兩個(gè)圖像的相似度

    摘要:最近看了阮一峰老師的相似圖片搜索的原理二,其中介紹了通過(guò)內(nèi)容特征法來(lái)對(duì)比兩個(gè)圖片的相似性。不知道是不是哪步出錯(cuò)了,感覺(jué)用這個(gè)方法計(jì)算出來(lái)的結(jié)果并不理想 最近看了阮一峰老師的相似圖片搜索的原理(二),其中介紹了通過(guò)內(nèi)容特征法來(lái)對(duì)比兩個(gè)圖片的相似性。 大致步驟: 把圖片都縮放到50x50大小 轉(zhuǎn)成灰度圖片 利用大津法(Otsus method)確定閾值 通過(guò)閾值再對(duì)圖片進(jìn)行二值化 對(duì)比兩...

    Leck1e 評(píng)論0 收藏0
  • 使用PythonOpenCV進(jìn)行基本的圖像處理——提取紅色圓圈輪廓并繪制

    摘要:使用,進(jìn)行基本的圖像處理提取紅色圓圈輪廓并繪制效果圖源碼寫(xiě)這篇博客源于博友的提問(wèn),想提取圖片中的紅色圓圈坐標(biāo),并繪制封閉的輪廓。還是使用一系列圖像處理,得到了比較理想的結(jié)果。 ...

    Gu_Yan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<