파이썬을 이용한 openCV and Matrix

2024. 10. 12. 00:00·컴퓨터 비전
반응형

24.10.10

openCV and Matrix

 

open cv로 이미지 불러오기

 

파이썬에 opencv함수를 통해서 이미지를 읽어보면

간단한 이미지 불러오기

 

 

이렇게 진행이되고 이때 imread()함수를 통해 읽고자하는 영상의 그 경로를 복사하여 붙여넣어주면 이미지를 불러오게 된다.

이때 filename의 경로, flags 순인데 만약 내가 그레이 스케일의 영상을 읽으려면 cv.IMREAD_GRAYSCALE을 추가해주고

컬러의 경우에는 cv.IMREAD_COLOR를 넣어주면 컬러 혹은 그레이 색으로 읽어온다. (default의 경우 COLOR이다)

 

lenna.bmp 님

 

 

내 경우 컬러 이미지를 읽어와서 바로 실행했으므로 색깔이 있는 이미지가 출력됨

(참고로 cv.imshow() 함수를 통해서 화면의 영상을 출력해 준다.)

 

또한 저장한 이미지를 파일로 저장하려면 imwrite() 함수를 사용한다. (나중에 알아보자)

 

글씨 죄송 ㅎㅎ

 

 

다음 실습의 경우 읽어드린 영상에 대해서 임의로 스케일을 저장해준 후

간단하게 해당 영상에 대한 type, shape를 알아보는 코드를 진행해봤다.

 

python의 cv.imread()를 통해 읽어드린 영상의 경우 타입이 numpy로 그 값이 저장이 되며

앞서 배운 grayscale의 경우 0~255사이의 값으로 이루어 지게 된다.

또한 shape의 경우 grayscale은 (a, b)로 2차원 color의 경우 (a, b, c) 로 3차원 이기 때문에 간단한 if 문을 통해 알 수 있다.

 

넘파이 배열에 대한 간단한 실습을 진행해 보았습니당ㅋ

 

 

np.empty() 의 경우 빈 배열로 480, 640 행열로 저장을 해주는 함수이고

np.zeros() 의 경우 지정해주는 행열에 대해 전부 0으로 채워주는 함수

np.ones() 의 경우 지정해주는 행열에 대해 전부 1로 채워주는 함수

np.full() 의 경우 지정해주는 행열에 원하는 값(하나로만 전부)을 채워주는 함수입니다.

 

간단한 슬라이싱을 통해 mat1 변수에 대한 값을 수정해 보았는데요

이때 mat1의 3행 4열에 해당하는 값이 334일때 원래 제가 지정한 uint8에 해당하는 값에 대해서는

334 - 256을 해준 78값으로 나오게 됩니다! (만약 256을넣는다면? 255를 넘어가기 때문에 256 - 256인 0이됨)

 

 

 

 

다음은 행렬의 복사 부분입니다!

만약 다음과 같이 코드를 작성한 뒤에 nums[2] = 10으로 지정을 해준다면 어떻게 될까요? (밑에 결과 나와있음)

지정 해주기 전에 print 해준 값에 대해선 그대로 출력되겠지만

nums 변수를 바꿔 줬을때 ref변수도 바뀐다는 것을 알 수 있습니다.

이를 방지하기 위해서는 .copy()함수를 통해 오류나는 것을 방지해보는게 좋을 듯 합니다! ( 별도 메모리 할당 전용)

 

이제 이를 영상실습에 적용해 보겠습니다.

코드는 다음과 같습니다.

 

귀여운 고양이를 읽어봤습니다 (컬러로 읽었어요!)

이때 확인해야 하는 부분은 img1의 경우 (0, 255, 255) 일때 우리가 흔히 알고있는 R G B순이 아닌

B, G, R순 임을 유념하고 내려가야 하는데요!

그 경우에 G, R 이 섞인 노란색으로 화면이 나올것 같습니다.

또한 img2의 경우 별도로 copy한게 아닌 img1 자체를 변수로 지정했기에 

결과의 경우

노랑 노랑 고양이

 

 

이렇게 나오게 되는걸 알 수 있습니다!

살짝 약간의 디테일 첨가해보면

R, G 색이 섞이면 노랑색 G, B 색이 섞이면 하늘색, R, B가 섞이면 분홍색정도 느낌의 색이 나오는걸 알 수 있어요!! 

이 그림을 참고하시면 좀 더 느낌이 잡힐듯 합니다!! 파이썬 cv.imread를 쓰면 서는? R G B 가아닌 B G R!! 브글~

 

출처: 구글 어딘가

 

lenna 이미지 밝기 차이 보기

 

 

다음은 유명한 레나이미지를 뽑은뒤에 부분행렬 추출 및 그레이스케일 값을 일부 더해줘서 해당 화면의 밝기 차이를 봐보는 코드입니당

어우 제 기준 1시 이해 부탁드림

 

 

어떤가요 img2 와 img3의 차이가 있어보이나요? 이상하게 3이 더 밝아보이네요 제생각엔 아마,, 다른 버전도 궁금해서 

호기심에 혼자서 값도 바꿔보느라 ,,ㅋㅋㅋㅋ 반전된 영상이어서 결과도 반대인듯 합니다! 다시 코드 바꿔서 진행 해보면

반전 아닌 일반 lenna.bmp를 통해 밝기 조절

 

해주으으면!

 

씸포 씸포한 결과 중앙부 주목

 

 

 체감상으로 img2값이 밝아보이는걸 알 수 있어요! 깨알 포인트로 img1의 경우 가운데 부분 살짝 경계선처럼 화면밝기 차이가 보이네요

 

이상으로 영상이 반전된 부분, 일반 그레이스케일 영상의 밝기를 올려보는 실습까지 마쳤습니다! 

 

(혹시 잘못된 부분이 있다면 언제든지 댓글 및 태클 등등 부탁드립니다 ㅎㅎ)

반응형

'컴퓨터 비전' 카테고리의 다른 글

파이썬으로 배우는 openCV (2) (도형, 텍스트 그리기)  (3) 2024.10.13
파이썬으로 배우는 openCV (1)  (2) 2024.10.12
컴퓨터 비전 개요  (9) 2024.10.11
'컴퓨터 비전' 카테고리의 다른 글
  • 파이썬으로 배우는 openCV (2) (도형, 텍스트 그리기)
  • 파이썬으로 배우는 openCV (1)
  • 컴퓨터 비전 개요
Ai_seph
Ai_seph
인공지능을 준비하는 통계 학부생 🖥️
    반응형
  • Ai_seph
    Ai_seph 님의 블로그
    Ai_seph
  • 전체
    오늘
    어제
    • 분류 전체보기 (8)
      • 마음가짐, 잡동사니 (1)
      • 선형대수 (3)
      • 통계학 (0)
      • 컴퓨터 비전 (4)
      • 논문 리딩 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    밝기조절
    텍스트그리기
    파이썬으로배우는opencv
    사진파일로저장되기까지
    스칼라
    opencv
    컴퓨터비전
    인공지능을위한준비
    로피탈
    통계학부
    인공지능
    행렬
    Python
    파이썬을 이용한 opencv
    인공지능대학원
    파이썬
    도형그리기
    Lenna
    결국해낸다
    평균값정리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Ai_seph
파이썬을 이용한 openCV and Matrix
상단으로

티스토리툴바