OpenCV/Python으로 다양한 필터 만들기

소개



안녕하세요! 나는 최근 여기에서 찾을 수 있는 이전 만화 필터 예제에 더 많은 필터를 추가하기로 결정했습니다.

이 글은 위의 글에 이어서 계속해서 가상환경 만들기 등은 생략하겠습니다.

그럼 멋진 필터를 더 추가해 봅시다! 😎


HDR 필터



HDR 효과 필터는 구현이 간단합니다. 우리는 detailEnhance 메서드를 사용하기만 하면 됩니다.

def HD (image):
  hdrImage = cv2.detailEnhance(image, sigma_s = 12, sigma_r = 0.15)

  return hdrImage


sigma_s는 이미지가 매끄럽게 되는 정도를 제어하고 sigma_r은 이미지를 매끄럽게 하면서 가장자리를 보존하는 데 중요합니다.




연필 스케치 그레이스케일/컬러 필터



이것은 opencv가 이미 우리를 위해 이것을 할 수 있는 방법을 가지고 있기 때문에 구현하기 쉬운 또 다른 필터입니다.
이 메서드는 그레이스케일 이미지와 컬러 이미지를 모두 반환합니다. 여기서는 컬러 버전을 반환하지만 그레이스케일 이미지도 자유롭게 사용해 보세요.

def pencil (image):
  sk_gray, skColor = cv2.pencilSketch(image, sigma_s = 60, sigma_r = 0.07, shade_factor = 0.1)

  return skColor





세피아 필터



세피아 필터를 사용하면 이미지에 갈색의 차분한 효과를 적용할 수 있습니다.
이를 위해 손실을 방지하기 위해 float로 변환하고 이미지를 변환한 다음 최종적으로 값을 정규화합니다.

def sepia (image):
  # Convert to float to prevent loss
  sepiaImage = np.array(image, dtype = np.float64)
  sepiaImage = cv2.transform(sepiaImage, np.matrix([[0.272, 0.543, 0.131], [0.349, 0.686, 0.168], [0.393, 0.769, 0.189]]))
  sepiaImage[np.where(sepiaImage > 255)] = 255
  sepiaImage = np.array(sepiaImage, dtype = np.uint8)

  return sepiaImage





선명 필터



이미지를 선명하게 하기 위해 filter2D 메서드를 사용하고 다음 커널을 적용합니다.

def sharpen (image):
  kernel = np.array([[-1, -1, -1], [-1, 9.5, -1], [-1, -1, -1]])
  sharpenedImage = cv2.filter2D(image, -1, kernel)

  return sharpenedImage





밝기 필터



이미지의 밝기를 조정하기 위해 convertScaleAbs 메서드를 사용합니다.

def brightness (image, betaValue):
  brightImage = cv2.convertScaleAbs(image, beta = betaValue)

  return brightImage




또한 이 필터를 사용하여 베타에 음수 값을 전달하여 이미지를 더 어둡게 만들 수 있습니다.




그레이스케일 필터



그레이스케일 필터는 cvtColor 메서드를 사용하여 구현하기 쉬운 또 다른 필터입니다.

def grayScale (image):
  grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

  return grayImage





반전 필터



구현하기 쉬운 또 다른 필터는 bitwise_not 메서드를 사용하여 픽셀 값을 반전시키기만 하면 됩니다.

def invert (image):
  invertedImage = cv2.bitwise_not(image)

  return invertedImage 





이미지 저장



모든 필터링 방법을 정의한 후에는 사용하지 않는 것이 부끄러운 일입니다.
다음을 포함하도록 기본 메서드를 편집합니다.

cartoonImage = cartoonize(image)
invertedImage = invert(image)
grayImage = grayScale(image)
brightImage = brightness(image, 60)
darkerImage = brightness(image, -60)
sharperImage = sharpen(image) 
sepiaImage = sepia(image)
pencilImage = pencil(image)
hdrImage = HD(image)


마지막으로 다음을 사용하여 파일에 출력을 작성하고 이를 기본 메서드에 추가할 수 있습니다.

cv2.imwrite("output.jpg", cartoonImage)
cv2.imwrite("inverted.jpg", invertedImage)
cv2.imwrite("grayscale.jpg", grayImage);
cv2.imwrite("brighter.jpg", brightImage)
cv2.imwrite("darker.jpg", darkerImage)
cv2.imwrite("sharper.jpg", sharperImage)
cv2.imwrite("sepia.jpg", sepiaImage)
cv2.imwrite("pencil.jpg", pencilImage)
cv2.imwrite("hdrImage.jpg", hdrImage)


완료!

어떤 다른 효과를 만들 수 있는지 확인하려면 값 등을 자유롭게 변경하십시오. 🥳


결론



여기에서는 이미지에 다양한 필터를 적용하는 방법을 보여주었습니다. 구현하기 어렵지 않은 opencv의 방법을 사용했습니다.

더 흥미롭고 재미있는 필터를 찾으면 다른 게시물을 작성하겠습니다. 🥸

저장소는 여기에서 찾을 수 있습니다.
https://github.com/ethand91/opencv-cartoon-filter


내가 일하는 것처럼? 다양한 주제에 대해 포스팅하고 있으니 더 보고 싶으시면 좋아요와 팔로우 부탁드립니다.
또한 저는 커피를 좋아합니다.

좋은 웹페이지 즐겨찾기