일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 정보처리기사필기
- CNN
- 혼공머신
- 텍스트마이닝
- 운영체제
- pandas
- 파이썬라이브러리
- 중학1-1
- 정보처리기사실기
- 컴퓨터구조
- 컴퓨터비전
- 정수와유리수
- 데이터베이스
- 데이터분석
- 자바 실습
- 중학수학
- 영어공부
- 코딩테스트
- 자바
- 머신러닝
- html/css
- 딥러닝
- 데이터입출력구현
- 파이썬
- JSP/Servlet
- C++
- 연습문제
- SQL
- numpy/pandas
- CSS
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
비전 에이전트 8 - 연습문제 풀기 2 : 문제 3~4번 본문
이어서 3번 문제부터 풀어보겠다.
연습문제 풀기 두 번째
문제 3번
프로그램 6-3에 대해 다음 내용을 답하시오.
(1) 이 프로그램은 <파일> 버튼 → <페인트> 버튼 → <오림> 버튼 순으로 클릭하면 제대로 실행된다. 하지만 <파일> 버튼 → <오림> 버튼 순서로 클릭하면 오류가 발생한다. 오류 메시지를 제시하고 이유를 설명하시오.
(2) 오류를 방지할 방법을 구상하고 프로그램을 개선하시오.
원래 코드
사진을 하나 저장하고 이 이미지를 불러왔다. 이제 문제를 풀어보자.
(1) <파일> 버튼 → <페인트> 버튼 → <오림> 버튼 순으로 클릭하면 제대로 실행되지만 <파일> 버튼 → <오림> 버튼 순서로 클릭하면 오류가 발생한다. 오류 메시지를 제시하고 이유를 설명하기
정말로 파일 버튼을 누른 다음 페인트를 하지 않고 오림 버튼을 누르자 다음과 같은 오류가 발생했다.
오류 발생 이유
이 오류는 grabCut 함수가 실행될 때 전경과 배경을 구분할 초기 마스크 값이 충분히 설정되지 않았기 때문에 발생한다.
<파일> 버튼을 눌러 이미지를 불러온 후, <페인트> 버튼을 클릭하여 마스크 영역을 설정하지 않은 상태에서 바로 <오림> 버튼을 누르면 grabCut 함수는 올바른 마스크 정보가 없기 때문에 오류를 발생시킨다. grabCut은 전경과 배경이 구분된 초기 마스크가 필요하다.
(2) 오류를 방지할 방법을 구상하고 프로그램을 개선하기
오류를 방지하기 위해, 사용자가 <파일> 버튼을 클릭한 후에 반드시 <페인트> 버튼을 통해 전경과 배경을 마스킹한 후에 <오림> 버튼을 클릭할 수 있도록 프로그램의 흐름을 제어하면 된다. 예를 들어, <페인트> 버튼을 클릭하여 마스크가 설정되었는지 확인한 후에만 <오림> 버튼을 활성화할 수 있게 하는 방법이 있다. 이를 구현하려면 <오림> 버튼을 비활성화 상태로 두었다가 마스크가 설정된 후 활성화되도록 수정할 수 있다.
문제의 조건에 맞는 코드 수정하기
코드 설명
- self.cutButton.setEnabled(False): 오림 버튼을 초기 상태에서 비활성화하여 페인팅 작업이 완료될 때까지 실행되지 않도록 설정했다.
- self.mask_painted : 페인팅 작업을 수행했는지 확인하기 위한 플래그. 페인팅 작업이 수행되면 True로 설정되어 cutButton을 활성화한다.
이렇게 하면 <파일> 버튼 → <오림> 버튼을 바로 클릭할 경우 오림 버튼이 비활성화되어 오류를 방지할 수 있다.
파일을 연 다음에 보니 오림 버튼이 비활성 되어 있다. 이제 페인팅을 한번 해볼 것이다.
페인팅을 하자 오림 버튼이 활성화되었다.
오림 버튼을 누르니 물체와 배경이 잘 분리된 것을 확인할 수 있다. 확인된 내용을 보니 정말 재미있고 희열을 느낀다.
문제 4번
프로그램 6-3에는 색칠을 지우는 기능이 없다. 이전에 칠한 색을 모두 지워 색칠이 안 된 초기 상태로 복원하는 <색칠 지우기> 버튼을 추가하시오.
문제 풀기
<색칠 지우기> 버튼을 추가하여 이전에 칠한 색을 모두 지우고 초기 상태로 복원하는 기능을 구현할 수 있다. 이를 위해 <색칠 지우기> 버튼을 추가하고, 버튼을 클릭하면 원본 이미지를 다시 표시하고 마스크도 초기화하도록 한다.
코드 설명
- 색칠 지우기 버튼 (eraseButton): <색칠 지우기> 버튼을 생성하여 초기 상태로 복원하도록 설정
- 색칠 지우기 함수 (eraseFunction): 색칠 지우기 버튼을 클릭할 때 호출되는 함수로, self.img_show를 원본 이미지로 복원하고, self.mask를 초기화하여 모든 화소를 배경 상태로 되돌린다.
- 결과: <파일> 버튼 → <페인팅> 버튼 → <색칠 지우기> 버튼을 통해 언제든지 페인팅을 초기 상태로 되돌릴 수 있다.
코드 실행 결과
귀여운 알파카 사진을 하나 불러왔다.
그런 다음 페인팅을 진행했다.
오림을 해서 알파카만 남기도록 만들었다.
그리고 나서 색칠 지우기 버튼을 클릭하면 이렇게 이전에 작업했던 페인팅이 모두 지워진다.
학습을 마치고
3번과 4번 문제도 무척 잘 풀었다. 두 문제가 유사한 문제라서 하나의 포스트에 묶으니 더 괜찮아 보였다. 이번 문제들은 40분 만에 모두 풀었다. 이제 딱 두 문제가 남아있는데 마지막 문제는 정말 어려워 보이지만 잘할 수 있으리라 믿고 도전해 보겠다. 5시 반까지는 연습문제를 다 풀고 새로운 단원 학습을 나가봐야지!
'인공지능 > 컴퓨터 비전' 카테고리의 다른 글
딥러닝 비전 1 - 방법론의 대전환과 기계학습 기초 (0) | 2024.11.12 |
---|---|
비전 에이전트 9 - 연습문제 풀기 3 : 문제 5~6번 (2) | 2024.11.12 |
비전 에이전트 7 - 연습문제 풀기 1 : 문제 1~2번 (0) | 2024.11.12 |
비전 에이전트 6 - [비전 에이전트 4] 특수 효과 2 : 비디오 특수 효과 (0) | 2024.11.12 |
비전 에이전트 5 - [비전 에이전트 4] 특수 효과 1 : 특수 효과의 원리와 정지 영상의 특수 효과 (0) | 2024.11.12 |