24.10.10
openCV and Matrix
open cv로 이미지 불러오기
파이썬에 opencv함수를 통해서 이미지를 읽어보면
이렇게 진행이되고 이때 imread()함수를 통해 읽고자하는 영상의 그 경로를 복사하여 붙여넣어주면 이미지를 불러오게 된다.
이때 filename의 경로, flags 순인데 만약 내가 그레이 스케일의 영상을 읽으려면 cv.IMREAD_GRAYSCALE을 추가해주고
컬러의 경우에는 cv.IMREAD_COLOR를 넣어주면 컬러 혹은 그레이 색으로 읽어온다. (default의 경우 COLOR이다)
내 경우 컬러 이미지를 읽어와서 바로 실행했으므로 색깔이 있는 이미지가 출력됨
(참고로 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!! 브글~
다음은 유명한 레나이미지를 뽑은뒤에 부분행렬 추출 및 그레이스케일 값을 일부 더해줘서 해당 화면의 밝기 차이를 봐보는 코드입니당
어떤가요 img2 와 img3의 차이가 있어보이나요? 이상하게 3이 더 밝아보이네요 제생각엔 아마,, 다른 버전도 궁금해서
호기심에 혼자서 값도 바꿔보느라 ,,ㅋㅋㅋㅋ 반전된 영상이어서 결과도 반대인듯 합니다! 다시 코드 바꿔서 진행 해보면
해주으으면!
체감상으로 img2값이 밝아보이는걸 알 수 있어요! 깨알 포인트로 img1의 경우 가운데 부분 살짝 경계선처럼 화면밝기 차이가 보이네요
이상으로 영상이 반전된 부분, 일반 그레이스케일 영상의 밝기를 올려보는 실습까지 마쳤습니다!
(혹시 잘못된 부분이 있다면 언제든지 댓글 및 태클 등등 부탁드립니다 ㅎㅎ)
'컴퓨터 비전' 카테고리의 다른 글
파이썬으로 배우는 openCV (2) (도형, 텍스트 그리기) (3) | 2024.10.13 |
---|---|
파이썬으로 배우는 openCV (1) (2) | 2024.10.12 |
컴퓨터 비전 개요 (9) | 2024.10.11 |