python + opencv 中值滤波器、最大值滤波器和最小值滤波器
生活随笔
收集整理的這篇文章主要介紹了
python + opencv 中值滤波器、最大值滤波器和最小值滤波器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
中值濾波器
中值濾波器好說,opencv自帶和函數就能直接用。在OpenCV中,實現中值濾波的函數是cv2.medianBlur(src, ksize)
- src:圖片位置
- kszie:卷積核大小
中值濾波會取當前像素點及其周圍臨近像素點(一共有奇數個像素點)的像素值,將這些像素值排序,然后將位于中間位置的像素值作為當前像素點的像素值。
將其鄰域設置為3×3大小,對其3×3鄰域內像素點的像素值進行排序(升序降序均可),按升序排序后得到序列值為:[66,78,90,91,93,94,95,97,101]。在該序列中,處于中心位置(也叫中心點或中值點)的值是“93”,因此用該值替換原來的像素值78,作為當前點的新像素值,處理結果如下。
最大最小值濾波器
中值濾波器的原理上邊講到了,最大最小值濾波器就是把中值換成最大或者最小值。
opencv沒有自帶的最大最小值濾波器,所以需要自己寫,定義函數的代碼如下:
def original(i, j, k, ksize, img):# 找到矩陣坐標x1 = y1 = -ksize // 2x2 = y2 = ksize + x1temp = np.zeros(ksize * ksize)count = 0# 處理圖像for m in range(x1, x2):for n in range(y1, y2):if i + m < 0 or i + m > img.shape[0] - 1 or j + n < 0 or j + n > img.shape[1] - 1:temp[count] = img[i, j, k]else:temp[count] = img[i + m, j + n, k]count += 1return temp# 自定義最大值濾波器最小值濾波器 def max_min_functin(ksize, img, flag):img0 = copy.copy(img)for i in range(0, img.shape[0]):for j in range(2, img.shape[1]):for k in range(img.shape[2]):temp = original(i, j, k, ksize, img0)if flag == 0: # 設置flag參數,如果是0就檢測最大值,如果是1就檢測最小值。img[i, j, k] = np.max(temp)elif flag == 1:img[i, j, k] = np.min(temp)return img注意,上邊這段代碼寫的比較簡單,只能接受卷積核是方陣的情況。
實際操作一下:
import cv2 as cv import numpy as np import copydef original(i, j, k, ksize, img):# 找到矩陣坐標x1 = y1 = -ksize // 2x2 = y2 = ksize + x1temp = np.zeros(ksize * ksize)count = 0# 處理圖像for m in range(x1, x2):for n in range(y1, y2):if i + m < 0 or i + m > img.shape[0] - 1 or j + n < 0 or j + n > img.shape[1] - 1:temp[count] = img[i, j, k]else:temp[count] = img[i + m, j + n, k]count += 1return temp# 自定義最大值濾波器最小值濾波器 def max_min_functin(ksize, img, flag):img0 = copy.copy(img)for i in range(0, img.shape[0]):for j in range(2, img.shape[1]):for k in range(img.shape[2]):temp = original(i, j, k, ksize, img0)if flag == 0:img[i, j, k] = np.max(temp)elif flag == 1:img[i, j, k] = np.min(temp)return imgimg = cv.imread('d:/Desktop/1.png') min_img = max_min_functin(3, copy.copy(img),1) max_img = max_min_functin(3, copy.copy(img),0) cv.imshow("original", img) cv.imshow("min_img", min_img) cv.imshow("max_img", max_img) cv.waitKey(0)可以看出最大值濾波可以去除圖像中的暗斑,同時也會使亮斑增大(膨脹);最小值濾波可以去除圖像中的亮斑,同時也會增大暗斑(腐蝕)。
總結
以上是生活随笔為你收集整理的python + opencv 中值滤波器、最大值滤波器和最小值滤波器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在mysql中创建视图需要使用什么语句_
- 下一篇: python项目方案书模板格式_项目策划