web-dev-qa-db-ja.com

OpenCVを使用したPythonの最小フィルター

OpenCVライブラリを使用して、一部の画像に最小フィルターを適用しようとしています。 OpenCVを使用してPythonで最小フィルターを実装するにはどうすればよいですか?それを行う関数はありますか?ない場合は、どのように記述できますか?

3
GAM

沿って min filterカーネルを画像の各場所で実行し、カーネルの中心をカーネルのピクセル内の最小値で置き換えることを意味していると思います。

Opencvでこれを実現するには、単にcv2.erode。ドキュメント ここ

ただし、最初に、カーネルのサイズと形状を定義する必要があります。あなたが使う cv.getStructuringElement doc ここ

例:

size = (3, 3)
shape = cv2.MORPH_RECT
kernel = cv2.getStructuringElement(shape, size)
min_image = cv2.erode(image, kernel)
1
Baraa

上記の回答に加えて、python + opencvに、最小および最大ボックスフィルターを適用するコードを実装します。

import cv2

def minimumBoxFilter(n, path_to_image):
  img = cv2.imread(path_to_image)

  # Creates the shape of the kernel
  size = (n, n)
  shape = cv2.MORPH_RECT
  kernel = cv2.getStructuringElement(shape, size)

  # Applies the minimum filter with kernel NxN
  imgResult = cv2.erode(img, kernel)

  # Shows the result
  cv2.namedWindow('Result with n ' + str(n), cv2.WINDOW_NORMAL) # Adjust the window length
  cv2.imshow('Result with n ' + str(n), imgResult)


def maximumBoxFilter(n, path_to_image):
  img = cv2.imread(path_to_image)

  # Creates the shape of the kernel
  size = (n,n)
  shape = cv2.MORPH_RECT
  kernel = cv2.getStructuringElement(shape, size)

  # Applies the maximum filter with kernel NxN
  imgResult = cv2.dilate(img, kernel)

  # Shows the result
  cv2.namedWindow('Result with n ' + str(n), cv2.WINDOW_NORMAL) # Adjust the window length
  cv2.imshow('Result with n ' + str(n), imgResult)


if __name__ == "__main__":
  path_to_image = 'images/africa.tif'

  print("Test the function minimumBoxFilter()")
  minimumBoxFilter(3, path_to_image)
  minimumBoxFilter(5, path_to_image)
  minimumBoxFilter(7, path_to_image)
  minimumBoxFilter(11, path_to_image)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

  print("Test the function maximumBoxFilter()")
  maximumBoxFilter(3, path_to_image)
  maximumBoxFilter(5, path_to_image)
  maximumBoxFilter(7, path_to_image)
  maximumBoxFilter(11, path_to_image)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

ここで、path_to_imageは文字列です。例: 'images/africa.tif'

次の結果が得られます。

最小フィルターを使用した場合:

result of minimum filter

最大フィルターを使用した場合:result of maximum filter

0
natigon