OpenCV/Python으로 다양한 필터 만들기
14363 단어 beginnerstutorialprogrammingpython
소개
안녕하세요! 나는 최근 여기에서 찾을 수 있는 이전 만화 필터 예제에 더 많은 필터를 추가하기로 결정했습니다.
이 글은 위의 글에 이어서 계속해서 가상환경 만들기 등은 생략하겠습니다.
그럼 멋진 필터를 더 추가해 봅시다! 😎
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
내가 일하는 것처럼? 다양한 주제에 대해 포스팅하고 있으니 더 보고 싶으시면 좋아요와 팔로우 부탁드립니다.
또한 저는 커피를 좋아합니다.

Reference
이 문제에 관하여(OpenCV/Python으로 다양한 필터 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ethand91/creating-various-filters-with-opencvpython-3077텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)