영상처리/opencv

openCV 기초

가은가은 2023. 2. 17. 18:33

1. 비디오 출력

동영상 파일을 읽으려면 컴퓨터에 동영상 코덱을 읽을 수 있는 라이브러리가 설치되어야 함

import cv2

# 비디오 출력 클래스(cv2.VideoCapture)를 통해 동영상 파일 정보를 받아옴
capture = cv2.VideoCapture("Image/Star.mp4")

while cv2.waitKey(33) < 0:
	# CAP_PROP_POS_FRAMES: 현재 프레임수, CAP_PROP_FRAME_COUNT: 동영상의 총 프레임 수 
    # 위 두 파라미터가 같다는 것은 영상이 끝났다는 것을 의미
    if capture.get(cv2.CAP_PROP_POS_FRAMES) == capture.get(cv2.CAP_PROP_FRAME_COUNT):
        capture.set(cv2.CAP_PROP_POS_FRAMES, 0) # 현재 프레임 수를 0으로 초기화

    ret, frame = capture.read()
    cv2.imshow("VideoFrame", frame)

capture.release()
cv2.destroyAllWindows()

 

2. 크기 조절

이미지를 확대하는 경우에는 픽셀에 대한 보간법, 이미지를 축소하는 경우에는 픽셀에 대한 병합법 수행

1)  사용자가 요구하는 절대 크기로 변경

2) 비율에 맞게 상대 크기로 변경

import cv2

src = cv2.imread("Image/champagne.jpg", cv2.IMREAD_COLOR)

# 1) 절대크기로 변경 - dsize : 변경 크기 지정, interpolation : 보간법 지정
dst = cv2.resize(src, dsize=(640, 480), interpolation=cv2.INTER_AREA)
# 2) 상대크기로 변경 - dsize : 크기는 (0,0)으로 지정
dst2 = cv2.resize(src, dsize=(0, 0), fx=0.3, fy=0.7, interpolation=cv2.INTER_LINEAR)

cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.imshow("dst2", dst2)
cv2.waitKey()
cv2.destroyAllWindows()

 

3. 색상 공간 변환 (Convert Color)

  • 본래 색상 공간에서 다른 색상 공간으로 변환할 때 사용
  • 색상 공간 변환 함수는 데이터 타입과 정밀도를 같게 유지하고 채널 변환
  • 채널의 수는 감소, 데이터 값이 변경되거나 채널 순서가 변경될 수 있음
import cv2

src = cv2.imread("Image/crow.jpg", cv2.IMREAD_COLOR)
# cvtColor : 색상 공간 변환 함수
# 색상 변환 코드 : "원본 이미지 색상 공간2결과 이미지 색상 공간"
# BGR은 RGC 색상채널을 의미함 (Byte 역순이기 때문에 BGR로..)
dst = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

 

4. Edge 검출

  • 가장자리는 픽셀의 밝기가 급격하게 변하는 부분으로 간주할 수 있음
  • 가장자리를 찾기 위해 미분(Derivative)와 기울기(Gradient)연산을 수행하여, 이미지 상에서 픽셀의 밝기 변화율이 높은 경계선을 찾음
import cv2

src = cv2.imread("Image/wheat.jpg", cv2.IMREAD_COLOR)
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

#입력 이미지에서 가장자리 검출
sobel = cv2.Sobel(gray, cv2.CV_8U, 1, 0, 3)
laplacian = cv2.Laplacian(gray, cv2.CV_8U, ksize=3)
canny = cv2.Canny(src, 100, 255)

cv2.imshow("sobel", sobel)
cv2.imshow("laplacian", laplacian)
cv2.imshow("canny", canny)
cv2.waitKey()
cv2.destroyAllWindows()