OpenCV

OpenCV 파이선 강의 실습 코드 1

지구빵집 2023. 11. 22. 12:54
반응형

 

 

 

처음 코드: 이미지 파일 불러오기

 

이 코드는 PyCharm 에디터에서 카피해서 직접 붙여 넣은 코드 모습이고

 

import cv2

image = cv2.imread('figures.jpg', cv2.IMREAD_UNCHANGED)
cv2.imshow("images", image)
cv2.waitKey(0)

 

 

아래는 블로그 에디터에서 코드 블럭으로 삽입한 코드 모습이다.

 

import cv2

image = cv2.imread('figures.jpg', cv2.IMREAD_UNCHANGED)
cv2.imshow("images", image)
cv2.waitKey(0)

 

 

지정한 털러 영상을 회색조 Grayscale 형태로 읽어 화면에 출력 후 원하는 포맷으로 저장

 

import cv2

image = cv2.imread('figures100.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow("images", image)
cv2.imwrite('figures-gray.jpg', image)
cv2.imwrite('figures-gray.bmp', image)
cv2.waitKey(0)

 

 

컬러 영상을 다양한 입력 방식으로 읽기

 

import cv2

cimage1 = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
cimage2 = cv2.imread('figures100.jpg', cv2.IMREAD_COLOR)
cimage3 = cv2.imread('figures100.jpg', cv2.IMREAD_REDUCED_COLOR_2)

gimage1 = cv2.imread('figures100.jpg', cv2.IMREAD_GRAYSCALE)
gimage2 = cv2.imread('figures100.jpg', cv2.IMREAD_REDUCED_GRAYSCALE_2)

cv2.imshow("Image1", cimage1)
cv2.imshow("Image2", cimage2)
cv2.imshow("Image3", cimage3)

cv2.imshow("Image4", gimage1)
cv2.imshow("Image5", gimage2)

cv2.waitKey(0)

 

 

입력 영상에 대한 넓이, 높이, 채널 수 정보 출력

 

import cv2

image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
(hit, wth, ch) = image.shape
print('height {}, width {}, channel #{}'.format(hit,wth,ch))

image = cv2.imread('figures-gray.jpg', cv2.IMREAD_UNCHANGED)
(hit, wth) = image.shape
print('height {}, width {}'.format(hit,wth))
cv2.waitKey(0)

 

 

이미지 3채널인지 2 채널인지 구분

 

print(len(image.shape))
print(len(image2.shape))

 

 

waitKey 사용

 

import cv2

image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
cv2.imshow('My Window', image)

# cv2.waitKey(1000)
# cv2.waitKey(0)

key = cv2.waitKey(0)
print("Key = {0} ({1})".format(key, chr(key)))

 

 

웹캠 입력

 

import cv2

capture = cv2.VideoCapture(0)
width = capture.get(cv2.CAP_PROP_FRAME_WIDTH)
height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT)
print('Frame width {}, height {}'.format(width, height))

capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1024)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 768)

while cv2.waitKey(32) <0:
    ret, frame = capture.read()
    if not ret:     # ret == False
        break
    cv2.imshow("Frame", frame)

capture.release()

 

 

강의 슬라이드 p.97

 

import cv2
capture = cv2.VideoCapture(0)

#if capture.isOpened() == True:
if capture.isOpened():
    ret, frame = capture.read()
    cv2.imshow("Frame", frame)

capture.release()
cv2.waitKey(0)

 

 

x 키 입력 기다리며 반복 처리

 

import cv2
capture = cv2.VideoCapture(0)

#if capture.isOpened() == True:
while capture.isOpened():
    ret, frame = capture.read()
    if not ret:
        break

    cv2.imshow("Frame", frame)

    key = cv2.waitKey(32)
    if key == ord('x'):
        break

capture.release()

 

 

반복 이미지 캡쳐

 

import cv2
import datetime

capture = cv2.VideoCapture(0)

while capture.isOpened():
    ret, frame = capture.read()
    if not ret:
        break

    cv2.imshow("Frame", frame)

    key = cv2.waitKey(32)
    if key == ord('x'):
        break
    elif key == ord('s'):
        now = datetime.datetime.now()
        filename = "{}-{}-{}.jpg".format(now.hour, now.minute, now.second)
        cv2.imwrite(filename, frame)

capture.release()

 

 

OpenCV 기본 입출력 - 동영상 파일

 

mp4 파일 읽기

 

import cv2

video = cv2.VideoCapture('kara.mp4')

width = video.get(cv2.CAP_PROP_FRAME_WIDTH)
height = video.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = video.get(cv2.CAP_PROP_FPS)
fcount = video.get(cv2.CAP_PROP_FRAME_COUNT)
fourcc = video.get(cv2.CAP_PROP_FOURCC)

print('Frame width {}, Height {}'.format(width, height))
print('Frme fps {}'.format(fps))
print('Frame count {}'.format(fcount))
print('Codec {}'.format(fourcc))

while cv2.waitKey(32) < 0:
    ret, frame = video.read()
    if not ret:
        break

    cv2.imshow("Frame", frame)

video.release()

 

 

동영상 파일 레코드 저장

 

import cv2

# Web Camera
capture = cv2.VideoCapture(0)
# video handle with codec setting
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
video = cv2.VideoWriter('capture.avi', fourcc, 30.0,(640,480))

while cv2.waitKey(32) < 0:
    ret, frame = capture.read()
    if not ret:
        break

    cv2.imshow("Frame", frame)
    video.write(frame)

capture.release()
video.release()

 

 

윈도우 생성 크기 조정, 이동, 닫기

 

import cv2

image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)

cv2.namedWindow("Sample Image", cv2.WINDOW_AUTOSIZE)
cv2.imshow("Sample Image", image)
cv2.waitKey(0)

cv2.resizeWindow("Sample Image", 256, 256)
cv2.waitKey(0)

cv2.moveWindow("Sample Image", 0, 0)
cv2.waitKey(0)

cv2.destroyWindow("Image")
cv2.destroyAllWindows()

 

 

키보드 이벤트 처리 - 윈도우 이동

 

import cv2

image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
x, y = 100, 100

while True:
    cv2.imshow("Image", image)
    cv2.moveWindow("Image", x, y)

    key = cv2.waitKey(0)
    print("Key = {} Char = {}".format(key, chr(key)))

    if key == ord('j'):
        x -= 10
    elif key == ord('k'):
        x += 10
    elif key == ord('i'):
        y -= 10
    elif key == ord('m'):
        y += 10
    else:
        break

 

 

사용자 마우스 입력에 따라 원 그리기

 

import cv2

def onMouse(event, x, y, flags, param):
    print(event, x, y)

    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.circle(param, (x, y), 30, (255, 0, 0), -1)
        cv2.imshow("Image", param)
    elif event == cv2.EVENT_RBUTTONDOWN:
        cv2.circle(param, (x, y), 30, (0, 0, 255), -1)
        cv2.imshow("Image", param)

image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
cv2.imshow("Image", image)

cv2.setMouseCallback("Image", onMouse, image)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

여기까지 기본 프로그램.

 

 

 

 

 

반응형