數(shù)字圖像處理三python實(shí)現(xiàn)-1

數(shù)字圖像處理三-1(平滑空間濾波器)

添加3000點(diǎn)噪聲

import cv2
import numpy as np
import matplotlib as plt

def addNoise(imgPath):
    
    # 讀取圖像,cv2以BGR讀取彩色圖像
    img = cv2.imread(imgPath)
    
    # 隨機(jī)添加噪聲
    noiseImg = img
    row, col, chn = noiseImg.shape    # 獲取圖像大小
    for i in range(3000):
        x = np.random.randint(0, row) # 隨機(jī)整數(shù)獲取
        y = np.random.randint(0, col)
        noiseImg[x, y, :] = 255
    
    return noiseImg

noiseImg = addNoise("cat.JPG")

# 顯示圖像
cv2.imshow("noiseImg", noiseImg)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 保存圖像
cv2.imwrite("catNoiseImg.jpg", noiseImg)
catNoiseImg.jpg

盒狀濾波器

cv2.blur(img, (3, 3)),模糊核大小為3 * 3,模糊核越大圖像會(huì)越模糊

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

# 讀取噪聲圖像
img = cv2.imread("catNoiseImg.jpg")
#img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # bgr轉(zhuǎn)為rgb,因?yàn)閙atplotlib顯示方式為rgb

# 盒狀濾波器
mean3Img = cv2.blur(img, (3, 3)) # 模糊核大小為3*3
mean5Img = cv2.blur(img, (5, 5)) # 模糊核大小為5*5
mean10Img = cv2.blur(img, (10, 10)) # 模糊核大小為10*10
# 顯示圖像
cv2.imshow("noiseImg", img)
cv2.imshow("cv2_blur_3", mean3Img)
cv2.imshow("cv2_blur_5", mean5Img)
cv2.imshow("cv2_blur_10", mean10Img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存圖像
cv2.imwrite("cv2_blur_3.jpg", mean3Img)
cv2.imwrite("cv2_blur_5.jpg", mean5Img)
cv2.imwrite("cv2_blur_10.jpg", mean10Img)

'''
# plt顯示圖像
titles = ['noiseImg','blur3*3','blur5*5','blur10*10']
imgs = [img,mean3Img,mean5Img,mean10Img]
for i in range(4):
    plt.subplot(2,2,i+1)
    plt.imshow(imgs[i])
    plt.title(titles[i])
    plt.xticks([])
    plt.yticks([])
plt.savefig('cv2_blur.png')    # plt保存圖像
plt.show()
'''
cv2_blur_3.jpg
cv2_blur_5.jpg
cv2_blur_10.jpg
# 只能奇數(shù)
import cv2
import numpy as np
import matplotlib as plt

def myMeanFilter(imgPath, len):
    
    # 讀取圖像及其大小、bgr
    img = cv2.imread(imgPath)
    rows, cols, channels = img.shape
    padNum = int((len - 1) / 2) # 填充長(zhǎng)度
    b, g, r = cv2.split(img) # 分離bgr
    
    # bgr分別填充
    bPadImg = np.zeros((rows + 2 * padNum, cols + 2 * padNum))
    bPadImg[padNum:padNum + rows, padNum:padNum + cols] = b # 中間復(fù)制
    gPadImg = np.zeros((rows + 2 * padNum, cols + 2 * padNum))
    gPadImg[padNum:padNum + rows, padNum:padNum + cols] = g
    rPadImg = np.zeros((rows + 2 * padNum, cols + 2 * padNum))
    rPadImg[padNum:padNum + rows, padNum:padNum + cols] = r
    
    # 濾波器
    meanFilter = np.ones((len, len))
    meanFilter = meanFilter/(len*len)
    
    for i in range(rows):
        for j in range(cols):
            b[i, j] = np.sum(bPadImg[i:i+len, j:j+len] * meanFilter)
            g[i, j] = np.sum(gPadImg[i:i+len, j:j+len] * meanFilter)
            r[i, j] = np.sum(rPadImg[i:i+len, j:j+len] * meanFilter)
    
    res = cv2.merge((b,g,r))
    return res

imgPath = "catNoiseImg.jpg"
img = cv2.imread(imgPath)
myMean3Img = myMeanFilter(imgPath, 3)
myMean5Img = myMeanFilter(imgPath, 5)
myMean9Img = myMeanFilter(imgPath, 9)
# 顯示圖像
cv2.imshow("noiseImg",img)
cv2.imshow("my_mean_blur_3", myMean3Img)
cv2.imshow("my_mean_blur_5", myMean5Img)
cv2.imshow("my_mean_blur_9", myMean9Img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存圖像
cv2.imwrite("my_mean_blur_3.jpg", myMean3Img)
cv2.imwrite("my_mean_blur_5.jpg", myMean5Img)
cv2.imwrite("my_mean_blur_9.jpg", myMean9Img)
my_mean_blur_3.jpg
my_mean_blur_5.jpg
my_mean_blur_9.jpg

中值濾波器

cv2.medianBlur(img, 7),size必須為奇數(shù),表示模糊核的長(zhǎng)度,越大越模糊

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

# 讀取噪聲圖像
img = cv2.imread("catNoiseImg.jpg")

# 中值濾波器
median3Img = cv2.medianBlur(img, 3)
median5Img = cv2.medianBlur(img, 5)
median9Img = cv2.medianBlur(img, 9)
# 顯示圖像
cv2.imshow("noiseImg", img)
cv2.imshow("cv2_median_blur_3", median3Img)
cv2.imshow("cv2_median_blur_5", median5Img)
cv2.imshow("cv2_median_blur_9", median9Img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存圖像
cv2.imwrite("cv2_median_blur_3.jpg", median3Img)
cv2.imwrite("cv2_median_blur_5.jpg", median5Img)
cv2.imwrite("cv2_median_blur_9.jpg", median9Img)
cv2_median_blur_3.jpg
cv2_median_blur_5.jpg
cv2_median_blur_9.jpg
import cv2
import numpy as np
import matplotlib.pylab as plt

def myMedianBlur(imgPath, len):
    img = cv2.imread(imgPath)
    rows, cols, channels = img.shape
    padNum = int((len - 1) / 2) # 填充長(zhǎng)度
    b, g, r = cv2.split(img) # 分離bgr
    bPadImg = np.zeros((rows + 2 * padNum, cols + 2 * padNum))
    bPadImg[padNum:padNum + rows, padNum:padNum + cols] = b # 中間復(fù)制
    gPadImg = np.zeros((rows + 2 * padNum, cols + 2 * padNum))
    gPadImg[padNum:padNum + rows, padNum:padNum + cols] = g
    rPadImg = np.zeros((rows + 2 * padNum, cols + 2 * padNum))
    rPadImg[padNum:padNum + rows, padNum:padNum + cols] = r
    for i in range(rows):
        for j in range(cols):
            b[i, j] = np.median(bPadImg[i:i+len, j:j+len]) # np中矩陣尋找中位數(shù)
            g[i, j] = np.median(gPadImg[i:i+len, j:j+len])
            r[i, j] = np.median(rPadImg[i:i+len, j:j+len])
    res = cv2.merge((b,g,r))
    return res

imgPath = "catNoiseImg.jpg"
img = cv2.imread(imgPath)
myMedian3Img = myMedianBlur(imgPath, 3)
myMedian5Img = myMedianBlur(imgPath, 5)
myMedian9Img = myMedianBlur(imgPath, 9)
# 顯示圖像
cv2.imshow("noiseImg", img)
cv2.imshow("my_median_blur_3", myMedian3Img)
cv2.imshow("my_median_blur_5", myMedian5Img)
cv2.imshow("my_median_blur_9", myMedian9Img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存圖像
cv2.imwrite("my_median_blur_3.jpg", myMedian3Img)
cv2.imwrite("my_median_blur_5.jpg", myMedian5Img)
cv2.imwrite("my_median_blur_9.jpg", myMedian9Img)
my_median_blur_3.jpg
my_median_blur_5.jpg
my_median_blur_9.jpg

高斯濾波器

cv2.GaussianBlur(img,(5,5),sigmax,sigmay)

import cv2
import numpy as np
import matplotlib as plt

# 讀取噪聲圖像
img = cv2.imread("catNoiseImg.jpg")

# 高斯濾波器
Gaussian3Img = cv2.GaussianBlur(img, (3,3), 0, 0)
Gaussian5Img = cv2.GaussianBlur(img, (5,5), 0, 0)
# 顯示圖像
cv2.imshow("noiseImg", img)
cv2.imshow("cv2_gaussian_blur_3", Gaussian3Img)
cv2.imshow("cv2_ganssian_blur_5", Gaussian5Img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存圖像
cv2.imwrite("cv2_gaussian_blur_3.jpg", Gaussian3Img)
cv2.imwrite("cv2_gaussian_blur_5.jpg", Gaussian5Img)
cv2_gaussian_blur_5.jpg
cv2_gaussian_blur_3.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容