일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 컴퓨터비전
- 자바스크립트
- html/css
- JSP
- ChatGPT
- 혼공머신
- 중학수학
- 정보처리기사실기
- SQL
- 딥러닝
- 중학1-1
- JSP/Servlet
- 자바스크립트심화
- 컴퓨터구조
- rnn
- 디버깅
- 개발일기
- JDBC
- 상속
- 머신러닝
- 타입스크립트심화
- 쇼핑몰홈페이지제작
- 데이터베이스
- 데이터분석
- 파이썬
- 정보처리기사필기
- 연습문제
- 자바 실습
- 순환신경망
- 자바
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
[Spiring반] 기말시험 2 - 컴퓨터 비전 시험 및 문제 풀이 본문
수료증과 시험이라는 카테고리를 하나 만들어서 학습일지를 쓰는 중이다. 그동안 과목별로 이수하면 이수증을 해당 과목에 올렸는데 이렇게 하니 보기도 힘든 것 같아 아예 따로 설정하기로 했다.
풀이 과정과 함께 일지를 쓰며 시험을 보다 보니 시간을 훨씬 더 많이 걸리지만 공부는 더 잘될 거라 믿는다.
컴퓨터 비전 문제
문제 6번
이 문제는 어렵지 않은 문제라 풀이는 생략하겠다.
7번 문제
이 문제는 캡처하기 전에 답을 먼저 선택해버렸다.
OpenCV에서 이미지의 색상 공간을 변환할 때는 cv2.cvtColor 함수를 사용한다. 코드에서 cv2.COLOR_BGR2RGB로 BGR 색상 공간을 RGB로 변환하고자 할 때, cvtColor 함수가 필요하다.
문제 8번
이 코드는 OpenCV를 사용하여 이미지를 불러오고, 이를 창에 띄운 후 키 입력을 기다렸다가 모든 창을 닫는 기능을 수행한다.
코드를 코랩에서 실행시키려고 했지만 그건 잘 되지 않았다. 그냥 문제나 풀어봐야겠다. 그러다가 시험 시간이 다 지나가겠다.
- cv2.destroyAllWindows()는 윈도우 창을 모두 닫는 기능이다.
- cv2.destroyAllWindows()는 OpenCV에서 열린 모든 창을 닫는 함수이다.
- img의 shape을 확인하면 (행, 열)과 같은 결과가 출력된다.
- img.shape은 (행, 열, 채널 수)의 형태로 출력된다. 컬러 이미지라면 (height, width, channels) 형식으로 나온다. 흑백 이미지의 경우 (행, 열)이지만, 일반적인 컬러 이미지에서는 (행, 열, 채널)로 출력된다. 따라서 틀린 답이다.
- cv2.imshow()는 이미지를 윈도우 창에 띄워 보여주는 기능이다.
- cv2.imshow()는 이미지를 창에 띄워서 보여주는 함수이다.
- img 변수에 담긴 데이터는 이미지일 뿐 배열은 아니다.
- 틀린 설명입니다. OpenCV에서 cv2.imread()로 불러온 이미지는 numpy 배열 형태로 저장된다. 따라서 이미지 데이터는 배열 형식이다.
- cv2.waitKey(0)는 사용자가 키보드를 입력할 때까지 무한 대기하겠다는 뜻이다.
- 맞는 설명입니다. cv2.waitKey(0)은 무한 대기하며, 키보드 입력이 있을 때까지 대기한다.
문제 9번
컴퓨터 비전은 아직 공부를 하지 않아서 문제를 푸는 게 쉽지 않다. 이 문제는 밝기, 어둡기, 중간 밝기의 여러 사진을 합성하여 밝은 부분과 어두운 부분 모두 잘 보이도록 하나의 이미지를 만드는 방법에 대해 묻는 것이다.
문제 분석
- 동일한 장면을 서로 다른 노출(밝기)로 촬영한 여러 장의 사진을 합성하여 전체적으로 디테일이 잘 보이게 하고 싶습니다.
- 밝은 영역과 어두운 영역이 모두 잘 보이게 하려면 각 사진의 밝은 부분과 어두운 부분을 적절히 합쳐야 합니다.
문제 풀어보기
- Image Blending(이미지 블렌딩)은 여러 이미지를 합성하여 하나의 이미지로 만드는 방법이다. 특히, 노출이 다른 여러 이미지를 합성하여 최적의 밝기와 대조를 가진 이미지를 만들 때 주로 사용된다.
- 차영상 기법 (Background Subtraction): 주로 비디오 분석에서 움직이는 객체를 추적할 때 사용되며, 배경과 전경을 분리하기 위한 방법이다.
- 히스토그램 평활화 (Histogram Equalization): 이미지의 명암을 균등하게 조절하여 대비를 높이는 방법이지만, 여러 사진을 합성하는 것과는 관련이 없다.
- 에지 검출 (Edge Detection): 이미지에서 윤곽선을 추출하는 방법으로, 밝기 차이가 나는 부분을 강조하는 것이 목적이다.
- 감마 보정 (Gamma Correction): 이미지의 밝기를 조정하는 방법으로, 전체적인 밝기 조정을 위한 기법이다.
따라서 답은 이미지 불렌딩이다.
문제 10번
이 문제는 OpenCV와 미리 학습된 얼굴 검출 모델을 사용하여 비디오 프레임에서 얼굴을 탐지하고, 각 얼굴에 대해 Bounding Box와 신뢰도(conf) 값을 화면에 출력하는 프로그램을 작성하는 것이다.
OpenCV의 DNN 모듈을 사용하여 deploy.prototxt와 res10_300x300_ssd_iter_140000.caffemodel을 활용한 얼굴 검출 모델을 사용할 수 있다.
코드는 찾아서 복사 붙여넣기 했지만 이 문제는 무슨 말인지도 잘 모르겠고 그냥 넘어가야겠다. 나중에 다시 한번 풀어봐야지. 지금은 시간도 없으니 빨리 다음 문제를 푸는 게 훨씬 더 나을 것 같다.
그래도 코드를 풀이해보면 다음과 같다.
- 모델 로드: res10_300x300_ssd_iter_140000.caffemodel과 deploy.prototxt 파일을 사용해 DNN 모델을 로드한다.
- 비디오 캡처: cv2.VideoCapture(0)으로 웹캠에서 비디오 프레임을 가져온다.
- 얼굴 검출:
- 프레임을 전처리하여 DNN 모델에 입력으로 사용한다.
- net.forward()를 통해 얼굴 검출 결과를 얻고, 각 결과에 대해 신뢰도(confidence)를 확인한다.
- Bounding Box와 신뢰도 출력:
- 신뢰도가 0.5 이상일 경우, 얼굴 주위에 사각형(Bounding Box)을 그리고, 하단에 신뢰도(conf) 값을 흰색으로 표시한다.
- 종료: q 키를 누르면 비디오 스트림이 종료된다.
시험을 마치고
컴퓨터 비전은 아직 공부하지는 않아서 실습 문제는 풀지 못했지만 다음 주부터 공부에 들어갈 예정이다. 그때가 되면 이 문제도 충분히 풀 수 있을 것 같다.
다음은 딥러닝 문제를 풀어보겠다.
'개발 포트폴리오 > 수료증 및 시험' 카테고리의 다른 글
[Spring반] 기말시험 4 - 시각지능 시험 및 문제 풀이 (0) | 2024.10.31 |
---|---|
[Spring반] 기말시험 3 - 딥러닝 시험 및 문제 풀이 (0) | 2024.10.31 |
[Spiring반] 기말시험 1 - 머신러닝 시험 및 문제 풀이 (0) | 2024.10.31 |
SQL로 데이터 다루기 기초 이수증 (0) | 2024.10.19 |
비전공자를 위한 머신러닝 이수증 (0) | 2024.10.19 |