摘要:對(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è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ì)比兩...
摘要:使用,進(jìn)行基本的圖像處理提取紅色圓圈輪廓并繪制效果圖源碼寫(xiě)這篇博客源于博友的提問(wèn),想提取圖片中的紅色圓圈坐標(biāo),并繪制封閉的輪廓。還是使用一系列圖像處理,得到了比較理想的結(jié)果。 ...
閱讀 2627·2021-10-08 10:04
閱讀 2743·2021-09-06 15:02
閱讀 822·2019-08-30 13:50
閱讀 1555·2019-08-30 13:21
閱讀 2594·2019-08-30 11:15
閱讀 2119·2019-08-29 17:19
閱讀 1585·2019-08-26 13:55
閱讀 1264·2019-08-26 10:15