[Opencv] 이미지

_찬·2022년 9월 17일
0

Opencv

목록 보기
1/6

오늘은 Opencv의 이미지에 대해서 조금 공부하였다.
현재 내가 공부하고 있는 영상은 나도코딩 이미지 처리 이다.

영상 링크
여기서 공부하면 됨!


이미지 출력


먼저 나는 아나콘다에서 주피터 노트북을 사용하여 코딩을 하였다.
import cv2
cv2.__version__

위 처럼 하게 된다면 현재 나의 cv2 버전을 알 수 있다.



이제 직접 이미지를 화면에 나오게 하도록 해보겠다.

그냥 아무 이미지 파일을 주피터 노트북 안에 내가 사용할 폴더의 경로에 넣어 주었다.

import cv2 
img = cv2.imread('img.jpg') # 해당 경로의 파일 읽어오기 
cv2.imshow('img', img) # img 라는 이름의 창에 img를 표시 
cv2.waitKey(5000) # 지정된 시간 동안 사용자 키 입력 대기 
cv2.destroyAllWindows() # 모든 창 닫기 

실행하면 이렇게 뜬다.



또한 읽기 옵션은 대표적으로 3가지가 있다.

  1. cv2.IMREAD_COLOR : 컬러 이미지, 투명 영역은 무시 (기본값)
  2. cv2.IMREAD_GRAYSCALE : 흑백 이미지
  3. cv2.IMREAD_UNCHANGED : 투명 영역까지 포함
img_color = cv2.imread('img.jpg', cv2.IMREAD_COLOR)
img_gray = cv2.imread('img.jpg', cv2.IMREAD_GRAYSCALE)
img_unchanged = cv2.imread('img.jpg', cv2.IMREAD_UNCHANGED)

cv2.imshow('img_color', img_color)
cv2.imshow('img_gray', img_gray)
cv2.imshow('img_unchanged', img_unchanged)

cv2.waitKey(0)
cv2.destroyAllWindows()

실행하면 총 3개의 창이 뜨게 되며 아무키나 누르면 꺼지게 된다.

실행화면



사진의 가로 세로 채널에 대해서 알 수 있다.
img.shape # 세로, 가로, Channel

(426, 640, 3)



이미지 크기 조정

고정 크기로 설정 방법

고정 크기로 설정 방법

import cv2
img = cv2.imread('img.jpg')
dst = cv2.resize(img, (400,500)) # 가로 세로 크기 

cv2.imshow('img', img)
cv2.imshow('resize', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

resize() 를 활용하여 수정하였다.

비율로 설정 방법

비율로 설정 방법

img = cv2.imread('img.jpg')
dst = cv2.resize(img, None, fx=0.5, fy=0.5) # x , y 비율 정의 ( 0.5 배로 축소 )

cv2.imshow('img', img)
cv2.imshow('resize', dst)
cv2.waitKey(0)
cv2.destroyAllWindows() 

비율을 fx = 0.5 이런식으로 설정하여 수정하였다.



이미지 자르기

새로운 윈도우 창에 표시

영역을 잘라서 새 윈도우 창에 표시

import cv2
img = cv2.imread('img.jpg')
# img.shape # 426 640 3

crop = img[100:200, 300:400] # 세로 기준 100 : 200 , 가로 기준 300 : 400

cv2.imshow('img',img) # 원본
cv2.imshow('crop',crop) # 잘린 이미지 
cv2.waitKey(0)
cv2.destroyAllWindows()

위와 같이하면 기존 이미지와 새로운 이미지가 뜨게 된다.

기존 윈도우 창에 새로운 이미지 표시

영역을 잘라서 기존 윈도우 창에 표시

import cv2
img = cv2.imread('img.jpg')

crop = img[100:200, 300:400] # 세로 기준 100 : 200 , 가로 기준 300 : 400
img[100:200 , 400 : 500] = crop

cv2.imshow('img',img) # 원본
cv2.waitKey(0)
cv2.destroyAllWindows()


이렇게 기존 창에서 새롭게 뜨게 된다.



이미지 대칭

상하대칭

상하대칭

import cv2
img = cv2.imread('img.jpg')
flip_vertical = cv2.flip(img, 0) # flipCode == 0 : 상하 대칭 

cv2.imshow('img',img)
cv2.imshow('flip_vertical', flip_vertical)
cv2.waitKey(0)
cv2.destroyAllWindows()


이것은 cv2.flip()을 사용하며, filp의 안에 (img, 0) 즉 숫자가 0 과 같다면 상하대칭이다.

상하좌우 대칭

상하좌우 대칭

import cv2
img = cv2.imread('img.jpg')
flip_both = cv2.flip(img, -1) # flipCode == 0 : 상하 대칭 

cv2.imshow('img',img)
cv2.imshow('flip_both', flip_both)
cv2.waitKey(0)
cv2.destroyAllWindows()

만약 filp이 -1 이라면 상하좌우 대칭이다.



이미지 회전

시계방향 90도

시계방향 90도 회전

import cv2
img = cv2.imread('img.jpg')

rotate_90 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) # 90도 시계방향 회전

cv2.imshow('img', img)
cv2.imshow('rotate_90', rotate_90)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.rotate()라는 것을 사용하며 cv2.ROTATE_90_CLOCKWISE (90도 시계방향 회전) 을 써주어야 한다.
기존에 출력되는 이미지는 지우고 이것만 가진을 가져왔다.

180도

180도 회전

import cv2
img = cv2.imread('img.jpg')

rotate_180 = cv2.rotate(img, cv2.ROTATE_180) # 180도 회전

cv2.imshow('img', img)
cv2.imshow('rotate_90', rotate_180)
cv2.waitKey(0)
cv2.destroyAllWindows()

이것은 아까처럼 cv2.ROTATE_90_CLOCKWISE 이 존재하지 않는다.

270도

270도 회전

import cv2
img = cv2.imread('img.jpg')

rotate_270 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE) # 90도 시계방향 회전

cv2.imshow('img', img)
cv2.imshow('rotate_270', rotate_270)
cv2.waitKey(0)
cv2.destroyAllWindows()

이것은 90도의 cv2.ROTATE_90_CLOCKWISE 에서 cv2.ROTATE_90_COUNTERCLOCKWISE 으로 바꿔주었다.

profile
꾸준한 사람이 되길!

0개의 댓글