관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

OpenCV로 시작하는 컴퓨터 비전 9 - 연습문제 풀기 1 : 문제 1~3번 본문

인공지능/컴퓨터 비전

OpenCV로 시작하는 컴퓨터 비전 9 - 연습문제 풀기 1 : 문제 1~3번

huenuri 2024. 11. 8. 05:04

이제 단원을 마무리하는 연습문제를 풀어보려고 한다. 문제가 많으니 몇 개로 나누어서 풀어보겠다.


 

 

 

연습문제 풀어보기

 

문제 1번

프로그램 2-1의 3행을 a=np.array([400,52,'tiger','24',230])으로 바꾸어 정수와 문자열을 혼합하면 어떤 일이 벌어지는지 실행하고 파이썬은 이 경우를 어떻게 해석하는지 설명하시오.

 

 

 

 

하지만 마지막에 "The system cannot find the path specified" 이런 문장이 뜬다. 이건 경로 인식이 잘 안 될 때 나타나는 건데, 파이썬에서는 파일 이름에 공백 문자가 있으면 이를 잘 인식하지 못한다고 한다. 이럴 때 명시적으로 경로를 지정하면서 r문제를 붙이면 코드를 잘 읽게 된다.

 

 

 

이제 해당 문장이 완전히 사라졌다. 개발자로서 가장 중요한 자질 중에 하나는 사소한 것도 그냥 넘어가지 않고 이를 해결하기 위해 노력해야 하는 점이다. 난 이런 부분이 개발을 하면서 자연스럽게 길러진 것 같다. 작은 문제이지만 꼭 해결해보고 싶고 무슨 문제인지 알고 싶다.


 

 

 

문제 풀기

서로 다른 데이터 타입의 요소(예: 정수와 문자열)를 혼합하여 numpy.array()로 배열을 생성하면, numpy는 모든 요소를 문자열(str)로 변환하여 저장한다.

numpy는 배열을 생성할 때 데이터 타입을 일관되게 유지해야 하기 때문에, 정수와 문자열이 섞여 있는 경우 자동으로 가장 포괄적인 데이터 타입인 문자열(str)로 모든 요소를 변환한다. 결과적으로 배열 a의 요소들은 모두 문자열로 해석하는 것이다.

 

numpy에서의 타입 변환 규칙

  • 혼합된 데이터 타입이 있는 경우: numpy는 가장 포괄적인 타입을 선택한다.
    • 정수와 실수가 섞여 있으면 float로 변환
    • 숫자와 문자열이 섞여 있으면 str로 변환
  • 따라서 [400, 52, 'tiger', '24', 230]은 모두 문자열로 변환된다.

 


 

 

 

 

문제 2번

np.ndarray 객체는 min, max, argmin, argmax, mean, sum, cumsum, prod, cumprod라는 멤버 함수를 가진다.

(1) 이 함수들이 각각 무엇을 하는지 조사하시오.

(2) 10개 가량의 실수를 가진 np.ndarray 객체를 만든 다음 이 객체에 이 함수들을 각각 적용하는 프로그램을 작성하고 조사한 대로 동작하는지 확인하시오.

 

 

(1) 이 함수들이 각각 무엇을 하는지 조사하기

 

  1. min()
    • 배열에서 최소값을 반환
    • 다차원 배열에서는 축(axis)을 지정하여 특정 축을 기준으로 최소값을 찾을 수 있다.
     
  2. max()
    • 배열에서 최대값을 반환
    • 다차원 배열에서도 축을 지정하여 최대값을 찾을 수 있다.
     
  3. argmin()
    • 배열에서 최소값의 인덱스(위치)를 반환
    • 다차원 배열에서 축을 지정할 수도 있다.
     
  4. argmax()
    • 배열에서 최대값의 인덱스(위치)를 반환
    • 다차원 배열에서도 축을 지정하여 최대값의 위치를 찾을 수 있다.
     
  5. mean()
    • 배열 요소들의 평균(산술 평균)을 계산하여 반환
    • 다차원 배열에서는 축을 지정하여 특정 축을 기준으로 평균을 구할 수 있다.
       
     
  6. sum()
    • 배열 요소들의 합계를 계산하여 반환
    • 다차원 배열에서 축을 지정하여 특정 축을 기준으로 합계를 구할 수 있다.
       
     
  7. cumsum()
    • 배열의 누적 합을 계산하여 반환
    • 배열의 각 요소를 순차적으로 더한 결과를 새로운 배열로 반환한다.
       
     
  8. prod()
    • 배열 요소들의 곱을 계산하여 반환
    • 다차원 배열에서 축을 지정하여 특정 축을 기준으로 곱을 구할 수 있다.
       
     
  9. cumprod()
    • 배열의 누적 곱을 계산하여 반환
    • 배열의 각 요소를 순차적으로 곱한 결과를 새로운 배열로 반환한다.
       
     

 

 

 

(2) 10개 가량의 실수를 가진 np.ndarray 객체를 만든 다음 이 객체에 이 함수들을 각각 적용하는 프로그램을 작성하고 조사한 대로 동작하는지 확인하기

 

 

 

누적 합과 곱을 구할 때는 인덱스 형태로 출력되는 것을 알 수 있다.


 

 

 

 

문제 3번

프로그램 2-2에서 서로 다른 영상 2개를 읽어 각각 img1과 img2에 저장하고 서로 다은 위도우에 디스플레이하는 프로그램으로 확장하기

 

 

 

 

 

이렇게 두 장의 사진이 왼쪽과 오른쪽에 배치되는 코드를 작성해 보았다. 사진이 너무 커서 다 보이지 않았다.

 

 

 

 

 


 

 

 

학습을 마치고

이렇게 세 문제를 풀어보았는데 문제를 풀면서 그동안 배웠던 것들을 상기해볼 수 있었다. 혼자서 코드를 작성하며 고민해 보는 이 시간은 정말 중요하다.

한 포스트당 3문제씩 풀어보려고 한다. 다음 문제도 풀어볼 것이다.