Python을 사용하여 모든 이미지를 스케치로 변환
아름다운 스케치를 만들려면 많은 시간과 노력이 필요합니다. 운 좋게도 프로그래밍이 발전하여 이제 쉽게 이미지를 변형하고 아름다운 디자인을 만들 수 있습니다. 수행할 수 있는 인상적인 기술 중 하나는 이미지를 디지털 스케치로 변환하는 것입니다.
기계적인 스케치가 자신의 연필 드로잉과 정확히 똑같지는 않지만 결과는 여전히 실험해 볼 가치가 있습니다. 매우 친숙한 Python 언어로 OpenCV 모듈을 사용하여 이러한 앱을 프로그래밍하는 방법을 알아보세요.
OpenCV 모듈
OpenCV는 이미지 처리 및 컴퓨터 비전에 사용되는 컴퓨터 비전 방법의 인텔에서 개발하고 유지 관리하는 오픈 소스 라이브러리입니다. 이를 통해 사용자는 최적화된 애플리케이션을 만들고 실시간으로 이미지 및 비디오와 상호 작용하고 필요에 맞는 이상적인 알고리즘을 선택할 수 있습니다.
OpenCV의 인기 있는 응용 프로그램에는 얼굴 감지, 영화 촬영의 자동 얼굴 추적, 소셜 미디어 필터, 자동차 번호판 인식 및 CCTV 모니터링이 포함됩니다. Python에서 OpenCV 모듈을 사용하려면 터미널을 열고 다음 명령을 입력하십시오.
pip install opencv-python
Python을 사용하여 이미지를 스케치로 변환하는 방법
좋아하는 이미지를 디지털 스케치로 변환하려면 먼저 쉽게 참조할 수 있도록 새 Python 프로그램과 동일한 폴더에 배치합니다. 그런 다음 다음 단계를 사용하여 프로그램 작성을 시작하십시오.
첫 번째 단계는 OpenCV 모듈을 환경으로 가져오는 것입니다. OpenCV를 사용할 수 있게 되면 해당 기능을 사용하여 다양한 작업을 수행할 수 있습니다. 이미지 파일의 경로를 imread() 함수에 전달하여 로드합니다. 나중에 참조할 수 있도록 이미지를 여기서는 image1 이라는 변수에 저장합니다 .
창의 제목을 window_name 변수에 저장합니다 . 이것은 imshow() 함수 를 사용하여 이미지를 표시하도록 선택할 때 유용합니다 . 이 기능에는 표시할 제목과 이미지라는 두 가지 매개변수가 필요합니다.
import cv2
image1 = cv2.imread('image.jpg')
window_name = 'Actual image'
cv2.imshow(window_name, image1)
원하는 이미지가 있으면 스케치로 변환하기 위해 다섯 가지 작업을 수행해야 합니다. 먼저 컬러 이미지를 그레이스케일로 변환합니다. cvtColor() 함수 로 그렇게 할 수 있습니다 . 이 함수는 색상을 변경하려는 이미지와 COLOR_BGR2GRAY 와 같은 변환 코드를 가져옵니다 .
grey_img = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
그레이스케일 이미지가 있으면 색상을 반전시킵니다. 이 시점에서 컴퓨터가 이미지를 형성하는 방법을 이해해야 합니다. 이미지는 다양한 강도를 가진 많은 작은 픽셀로 구성됩니다. 컬러 이미지에서 각 픽셀은 빨강, 녹색 및 파랑 구성 요소를 포함하며 각각의 강도는 0에서 255까지 다양합니다.
회색조 이미지에는 회색 음영만 있으므로 픽셀의 강도는 0과 1 사이에서 변합니다. 이 이미지의 픽셀 강도를 반전하려면 회색조 이미지를 bitwise_not() 함수에 전달합니다.
이름에서 알 수 있듯이 이 함수는 각 픽셀의 값을 상호 보완적인 값으로 반전시킵니다. 0보다 큰 모든 픽셀은 0으로 설정되고 0과 같은 모든 픽셀은 255로 설정됩니다.
invert = cv2.bitwise_not(grey_img)
픽셀 강도를 반전한 후 Gaussian Blur를 사용하여 이미지를 부드럽게 할 수 있습니다. 가우시안 블러 프로세스는 가우시안 필터를 사용합니다. 가우시안 필터는 저주파만 통과시켜 신호나 이미지의 고주파 성분을 제거하는 저역 통과 필터입니다.
OpenCV의 GaussianBlur() 함수는 4개의 매개변수를 받습니다. 이들은 원본 이미지, ksize(커널 크기) 및 sigmaX(가우시안 커널 표준 편차) 역할을 하는 행렬 개체입니다.
손에 실제 사진이 있다고 가정합니다. 흐릿하게 만들고 싶다면 왁스나 양피지 조각을 그 위에 붙일 수 있습니다. 커널을 이 투명한 종이 조각으로 상상할 수 있습니다. 디지털 방식에서는 조금 다르게 발생합니다. 디지털 이미지에 흐림, 선명화 및 기타 효과를 적용하려면 행렬에 이미지 픽셀의 강도를 곱합니다.
ksize는 항상 양의 홀수입니다. 커널 크기를 늘리면 흐림이 증가합니다. sigmaX를 이해하기 위해 종이에 왁스를 바르고 있다고 가정합니다. 왁스를 바르면 종이가 균일하게 반투명해집니다. 마찬가지로 커널의 값을 특정 지점(평균)에 가깝게 유지해야 합니다. sigmaX 값은 이미지에 있는 픽셀의 평균과 다른 값 간의 차이를 정의합니다.
반전된 이미지, 커널 크기를 (21, 21)로, 0 표준편차를 Gaussian Blur 함수에 전달합니다.
blur = cv2.GaussianBlur(invert, (21, 21), 0)
흐리게 처리된 이미지를 bitwise_not() 함수에 다시 전달하여 반전시킵니다.
invertedblur = cv2.bitwise_not(blur)
마지막으로, Divide() 함수를 사용하여 그레이스케일 이미지 배열과 반전된 블러 이미지 배열의 요소별 분할을 256 스케일로 수행합니다.
sketch = cv2.divide(grey_img, invertedblur, scale=256.0)
기본적으로 이 함수는 다음 작업을 수행합니다.
def divide(grey_img, b, invertedblur=256.0):
return (grey_img * scale) / invertedblur
스케치라는 변수에 결과를 저장합니다. 최종 이미지를 저장하려면 출력 파일의 이름과 스케치 이미지를 imwrite() 함수에 전달합니다. 이를 확인하기 위해 imread() 함수를 사용하여 저장된 스케치 이미지를 로드하고 창 제목을 지정하고 imshow() 함수를 사용하여 표시할 수 있습니다.
아무 키나 누를 때까지 원본 이미지 창과 생성된 스케치 창을 표시하려면 0을 전달 하여 waitkey() 함수를 사용합니다.
cv2.imwrite("sketch.jpeg", sketch)
image = cv2.imread("sketch.jpeg")
window_name ='Sketch image'
cv2.imshow(window_name, image)
cv2.waitKey(0)
모든 코드를 함께 가져오면 프로그램이 준비됩니다.
이 Python 프로그램을 사용하여 이미지를 스케치로 변환하는 샘플 출력
아름다운 풍경 이미지를 선택하고 프로그램을 통해 실행하여 이 놀라운 디지털 스케치를 생성할 수 있습니다.
세로 이미지에서 프로그램은 다음과 같은 디지털 스케치를 생성합니다.
원하는 디지털 스케치를 생성하기 위해 원하는 대로 기능의 매개변수를 실험할 수 있습니다.
이미지 처리 및 컴퓨터 비전
이미지 처리 및 컴퓨터 비전은 밀접하게 관련된 두 가지 기술 분야입니다. 둘 다 원하는 결과를 얻기 위해 디지털 이미지를 변경하는 작업을 포함합니다. 이미지 처리는 사진을 개선하는 데 초점을 맞추는 반면, 컴퓨터 비전은 이미지를 이해하기 위해 이미지 내에서 패턴과 개체를 찾습니다.
Scikit-image는 다양한 이미지 처리 기능을 제공하는 또 다른 Python 라이브러리입니다. 미리 컴파일된 여러 모듈, 필터, 계층, 변환 등이 있습니다. CNN 및 RNN과 같은 딥 러닝 모델에 사용할 모듈을 찾고 있다면 Torchvision을 살펴보는 것이 좋습니다.
답글 남기기