일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 정보처리기사실기
- 혼공머신
- 머신러닝
- JSP/Servlet
- 데이터베이스
- 중학수학
- C++
- pandas
- 파이썬라이브러리
- 중학1-1
- CSS
- SQL
- 영어공부
- 자바 실습
- 데이터분석
- 텍스트마이닝
- 파이썬
- 컴퓨터구조
- 딥러닝
- 데이터입출력구현
- 정수와유리수
- CNN
- html/css
- numpy/pandas
- 운영체제
- 자바
- 컴퓨터비전
- 연습문제
- 정보처리기사필기
- 코딩테스트
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
비전 에이전트 5 - [비전 에이전트 4] 특수 효과 1 : 특수 효과의 원리와 정지 영상의 특수 효과 본문
3장에서 필터로 컨볼루션을 수행하면 엠보싱이라는 특수 효과를 거둘 수 있음을 프로그램 3-7에서 확인했다. 여기서는 엠보싱뿐 아니라 카툰, 연필 스케치, 유화라는 특수 효과로 확장하여 GUI를 붙인 비전 에이전트를 제작해 볼 것이다.
특수 효과의 원리
OpenCV는 특수 효과를 휘한 흥미로운 함수를 여러 개 제공한다. stylization은 카툰 효과, pencilSketch는 연필로 스케치한 효과, oilPainting은 유화 효과를 제공한다. sylization과 pencilSketch는 기본값이 설정되어 있어 생략해도 되지만 oilPainting은 기본값이 없으니 꼭 지정해야 한다. 특수 효과에 대한 설명은 다음 링크를 참고하면 된다.
특수 효과를 위한 함수 참고 자료
웹사이트 주소가 정말 길어서 한번 치기도 힘들다. 그래도 나중을 위해 링크를 걸어둔다.
가우시안 필터로 컨볼루션을 수행하면 물체 경계를 포함하여 영상 전체가 흐릿해진다. 때로는 물체 경계의 명암 대비를 유지하면서 다른 부분만 흐릿하게 만들 필요가 있다. 이런 조건을 만족하는 필터를 에지 보존 필터라 한다. stylization과 pencilSketch 함수는 에지 보존 필터를 활용한다. 식 (6.1)이 정의하는 양방향 필터는 가장 널리 쓰이는 에지 보존 필터다. 간편성을 위해 1차원 컨볼루션으로 설명한다.
정지 영상의 특수 효과
프로그램 6-6 실습을 하기 전에 명령어를 통해 패키지를 설치한다.
하지만 오류가 뜬다. 이 오류는 Windows에서 권한 문제로 인해 발생한 것으로, cv2.pyd 파일에 접근할 수 없기 때문에 패키지 설치가 실패한 것이다. 이 문제를 해결하기 위해 몇 가지 방법을 시도할 수 있다.
1. 관리자 권한으로 실행하기
터미널을 관리자 권한으로 실행한 후 다시 pip install 명령을 시도해 보자.
- Anaconda Prompt 또는 Command Prompt를 관리자 권한으로 실행한다.
- conda activate cv로 가상 환경을 활성화한다.
- pip install opencv-contrib-python 명령을 다시 실행한다.
하지만 여전히 오류가 뜬다. 파일 경로를 파이썬이 있는 폴더로 이동했는데도 말이다. 이 방법이 안 되면 두번째 방법이 또 있으니 이걸로 시도해 보았다.
2. --user 옵션 사용
위 방법이 안 될 경우, --user 옵션을 사용하여 현재 사용자 디렉터리에 패키지를 설치할 수 있다. 이때 주의할 점은 관리자 권한으로 실행하지 않는 것이다. --user 옵션은 관리자 권한이 필요하지 않도록 현재 사용자 디렉토리에 패키지를 설치하는 옵션이므로, 관리자 권한 없이 실행해도 된다.
이렇게 하니 성공적으로 설치가 되었다. 휴~ 여기까지 하는데 30분도 훨씬 넘게 걸렸다. 이제 프로그램을 실행할 차례이다.
사진 영상에 특수 효과 처리하기
이 코드는 PyQt5와 OpenCV를 사용하여 사진에 다양한 특수 효과를 적용하고 저장할 수 있는 GUI 애플리케이션이다. 사용자는 이미지 파일을 선택하여 엠보싱, 카툰, 연필 스케치, 유화 등 다양한 효과를 실시간으로 적용하고, 저장할 수 있다.
1. 필요한 라이브러리 임포트
import cv2 as cv
import numpy as np
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication, QFileDialog, QLabel, QComboBox
import sys
- cv2: OpenCV 라이브러리로 이미지 읽기, 변환, 효과 적용에 사용된다.
- numpy: 배열 연산을 위한 라이브러리이다.
- PyQt5.QtWidgets: PyQt5를 통해 GUI 구성 요소(QMainWindow, QPushButton, QLabel 등)를 가져온다.
- sys: 시스템 관련 작업으로 프로그램 종료 시 사용된다.
2. SpecialEffect 클래스 정의
class SpecialEffect(QMainWindow):
- SpecialEffect 클래스는 QMainWindow를 상속받아 GUI 윈도우를 구성하고, 효과를 적용하는 메서드를 정의한다.
3. 초기화 메서드
def __init__(self):
- 애플리케이션 창 제목과 크기를 설정하고, 여러 개의 버튼과 라벨을 생성하여 화면에 배치한다.
- pickCombo 콤보박스를 사용하여 저장할 이미지 효과를 선택할 수 있다.
4. 사진 파일 열기 함수 (pictureOpenFunction)
def pictureOpenFunction(self):
- QFileDialog를 사용해 사진 파일을 선택하고, OpenCV로 이미지를 읽어서 화면에 표시한다.
- 만약 파일을 찾지 못하면 프로그램이 종료된다.
5. 엠보싱 효과 함수 (embossFunction)
def embossFunction(self):
- 엠보싱 효과를 적용하기 위해 femboss라는 3x3 필터를 사용한다.
- 이미지 데이터를 그레이스케일로 변환한 뒤, 엠보싱 필터를 적용하고 화면에 표시한다.
6. 카툰 효과 함수 (cartoonFunction)
def cartoonFunction(self):
- cv.stylization 함수를 사용하여 카툰 효과를 적용한다.
- sigma_s와 sigma_r 파라미터를 조정하여 카툰 스타일의 이미지를 생성하고 화면에 표시한다.
7. 연필 스케치 효과 함수 (sketchFunction)
def sketchFunction(self):
- cv.pencilSketch를 사용하여 흑백과 컬러 연필 스케치 효과를 생성한다.
- sigma_s, sigma_r, shade_factor 파라미터를 조정하여 연필 스케치 스타일을 적용하고, 흑백 및 컬러 스케치 이미지를 각각 화면에 표시한다.
8. 유화 효과 함수 (oilFunction)
def oilFunction(self):
- cv.xphoto.oilPainting을 사용해 유화 효과를 생성한다.
- cv.COLOR_BGR2Lab 색상 변환을 적용하여 유화 스타일을 적용하고 결과 이미지를 화면에 표시한다.
9. 이미지 저장 함수 (saveFunction)
def saveFunction(self):
- 콤보박스에서 선택된 효과를 기준으로 이미지를 저장하는 함수이다.
- QFileDialog로 파일 경로를 지정하고, 사용자가 선택한 효과(엠보싱, 카툰, 스케치, 유화 등)를 저장한다.
10. 프로그램 종료 함수 (quitFunction)
def quitFunction(self):
- OpenCV로 열려있는 모든 창을 닫고 프로그램을 종료하는 함수이다.
11. PyQt5 애플리케이션 실행
app = QApplication(sys.argv)
win = SpecialEffect()
win.show()
app.exec_()
- QApplication 객체를 생성하여 GUI 애플리케이션을 실행하고, SpecialEffect 클래스를 생성하여 창을 표시한다. app.exec_()로 애플리케이션의 이벤트 루프가 시작된다.
코드 실행해 보기
1. 원본 사진
2. 엠보싱
3. 카툰
4. 연필 스케치(컬러)
5. 유화
그리고 저장하기에는 여기 메뉴에 없는 것들도 저장된다. 이를 테면 이런 것들이다.
6. 저장되어 있는 연필 스케치(흑백)
정말 그림이 마음에 들어서 저장할 수 있는 건 모두 저장해 보았다.
학습을 마치고
이렇게 특수 효과를 사용해서 사진 이미지를 예술적인 느낌으로 바꿀 수 있었다. 중간에 설치하는 과정이 무척 힘들고 잘 되지 않았지만 끝까지 문제를 붙잡고 해 보니 해결할 수 있었다.
이렇게 책에 나와있는 예제라고 할지라도 내 컴퓨터 상황에 따라 코드는 얼마든지 바뀔 수 있고 자신에게 맞는 코드로 바꾸는 작업이 필요하다는 것을 배우는 시간이었다.
비디오 특수 효과는 다음 포스트에 이어서 학습해 보겠다.
'인공지능 > 컴퓨터 비전' 카테고리의 다른 글
비전 에이전트 7 - 연습문제 풀기 1 : 문제 1~2번 (0) | 2024.11.12 |
---|---|
비전 에이전트 6 - [비전 에이전트 4] 특수 효과 2 : 비디오 특수 효과 (0) | 2024.11.12 |
비전 에이전트 4 - [비전 에이전트 3] 파노라마 영상 제작 (0) | 2024.11.12 |
비전 에이전트 3 - [비전 에이전트 2] 교통약자 보호구역 알림 (4) | 2024.11.12 |
비전 에이전트 2 - [비전 에이전트 1] 오림 (1) | 2024.11.12 |