圖像處理
圖像處理是用計(jì)算機(jī)對(duì)圖像進(jìn)行分析,以獲取所需結(jié)果的過(guò)程,又稱為影像處理。圖像處理一般是指數(shù)字圖像的處理。數(shù)字圖像是用工業(yè)相機(jī)、攝像機(jī)、掃描儀等設(shè)備經(jīng)過(guò)拍攝得到的一個(gè)大的二維數(shù)組,該數(shù)組的元素稱為像素,其值稱為灰度值。
圖像模糊
均值濾波
均值濾波是指任意一點(diǎn)的像素值,都是周圍 NxM 個(gè)像素值的均值。
指通過(guò)將圖像與低通濾波器內(nèi)核進(jìn)行卷積來(lái)實(shí)現(xiàn)圖像模糊,這對(duì)于消除噪聲很有用。
OpenCv里可以用cv2.blur(img,(3,3)) 函數(shù)實(shí)現(xiàn)圖像的均值濾波。
第二個(gè)參數(shù)(3,3)稱為濾波核。
中值濾波
在使用鄰域平均法去噪的同時(shí)也使得邊界變得模糊。而中值濾波是非線性的圖像處理方法,在去噪的同時(shí)可以兼顧到邊界信息的保留。選一個(gè)含有奇數(shù)點(diǎn)的窗口W,將這個(gè)窗口在圖像上掃描,把窗口中所含的像素點(diǎn)按灰度級(jí)的升或降序排列,取位于中間的灰度值來(lái)代替該點(diǎn)的灰度值。
OpenCV里可以使用cv2.medianBlur(img,3)函數(shù)來(lái)實(shí)現(xiàn)
3為簡(jiǎn)寫方式 ,與(3,3)是一樣的。
高斯濾波
為了克服簡(jiǎn)單局部平均法的弊端(圖像模糊),目前已提出許多保持邊緣、細(xì)節(jié)的局部平滑算法。它們的出發(fā)點(diǎn)都集中在如何選擇鄰域的大小、形狀和方向、參數(shù)加平均及鄰域各店的權(quán)重系數(shù)等。
圖像高斯平滑也是鄰域平均的思想對(duì)圖像進(jìn)行平滑的一種方法,在圖像高斯平滑中,對(duì)圖像進(jìn)行平均時(shí),不同位置的像素被賦予了不同的權(quán)重。高斯平滑與簡(jiǎn)單平滑不同,它在對(duì)鄰域內(nèi)像素進(jìn)行平均時(shí),給予不同位置的像素不同的權(quán)值
cv2.GaussianBlur(source,(3,3),0)
第一個(gè)參數(shù)為圖像對(duì)象
第二個(gè)參數(shù)為濾波核
第三個(gè)參數(shù)0為高斯核標(biāo)準(zhǔn)差
實(shí)例
import cv2
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認(rèn)字體為黑體
mpl.rcParams['axes.unicode_minus'] = False # 正常顯示負(fù)號(hào)
# 均值濾波
img = cv2.imread('./dog.jpg', 0) # 第二個(gè)參數(shù)0 是設(shè)置為灰度圖用的
blur = cv2.blur(img, (5, 5))
# 顯示圖像
plt.subplot(1, 2, 1)
plt.imshow(img, 'gray')
plt.title("zaosheng")
plt.subplot(1, 2, 2)
plt.imshow(blur, 'gray')
plt.title("blur")
plt.show()
# 中值濾波
img = cv2.imread("./dog.jpg", 0)
dst = cv2.medianBlur(img, (5)) # 卷積核大小為5
# 顯示圖像
plt.subplot(1, 2, 1)
plt.imshow(img, "gray")
plt.title("zaosheng")
plt.subplot(1, 2, 2)
plt.imshow(dst, 'gray')
plt.title("medianBlur")
plt.show()
# 高斯濾波
img = cv2.imread("./dog.jpg", 0)
m_dst = cv2.medianBlur(img, (5))
g_dst = cv2.GaussianBlur(img, (5, 5), 0) # 高斯核為5*5
# 顯示圖像
plt.subplot(1, 3, 1), plt.imshow(img, 'gray')
plt.title("zaosheng")
plt.subplot(1, 3, 2), plt.imshow(g_dst, 'gray')
plt.title('高斯')
plt.subplot(1, 3, 3), plt.imshow(m_dst, 'gray')
plt.title('medianBlur')
plt.show()
均值濾波
中值濾波
高斯濾波:
圖像銳化
圖像銳化是補(bǔ)償圖像的輪廓,以及增強(qiáng)圖像的邊緣和灰度跳變的部分,使圖像變得清晰的操作,分為空間域處理和頻處理兩類。
圖像銳化的目的是突出圖像地物的邊緣、輪廓,或者某些線性目標(biāo)要素的特征。這邪惡濾波方法增強(qiáng)了地物邊緣與周圍像元之間的反差,因此也稱為邊緣增強(qiáng)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-728653.html
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
dog = cv.imread("./dog.jpg", 0)
# plt.imshow(dog, 'gray')
# plt.title("灰度圖")
# plt.show()
dog_f = np.copy(dog)
dog_f = dog_f.astype("float")
# plt.imshow(dog_f, "gray")
# plt.title('灰度圖2')
# plt.show()
row, column = dog.shape
gradient = np.zeros((row, column))
for x in range(row-1):
for y in range(column-1):
gx = abs(dog_f[x+1, y]-dog_f[x, y]) # 通過(guò)相鄰像素相減計(jì)算圖像梯度
gy = abs(dog_f[x, y+1]-dog_f[x, y])
gradient[x, y] = gx + gy
# plt.imshow(gradient, 'gray')
# plt.title("梯度圖")
# plt.show()
# 疊加原圖和梯度圖 就能夠?qū)崿F(xiàn)圖像銳化
# 將小于0 的像素設(shè)置為0 將大于255的像素設(shè)置為255
sharp = dog_f + gradient
sharp = np.where(sharp < 0, 0, np.where(sharp > 255, 255, sharp))
# 顯示圖像
gradient = gradient.astype("uint8")
sharp = sharp.astype("uint8")
plt.subplot(2, 2, 1), plt.imshow(dog), plt.title("原圖")
plt.subplot(2, 2, 2), plt.imshow(dog_f, "gray"), plt.title("灰度圖")
plt.subplot(2, 2, 3), plt.imshow(gradient, "gray"), plt.title("梯度圖")
plt.subplot(2, 2, 4), plt.imshow(sharp, "gray"), plt.title("銳化圖")
plt.show()
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-728653.html
到了這里,關(guān)于基于OpenCV的傳統(tǒng)視覺(jué)應(yīng)用 -- OpenCV圖像處理 圖像模糊處理 圖像銳化處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!