2024. 11. 27. 10:20ㆍ컴퓨터비전&AI
- 영상 보여주기
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("Camera open failed!")
exit()
print('Frame width:', int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
print('Frame height:', int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('Frame count:', int(cap.get(cv2.CAP_PROP_FRAME_COUNT)))
print('FPS:', cap.get(cv2.CAP_PROP_FPS))
cv2.namedWindow("frame", cv2.WINDOW_NORMAL)
cv2.resizeWindow("frame", 640, 480)
while True:
ret, frame = cap.read()
if ret == False:
break
cv2.imshow('frame', frame)
if cv2.waitKey(10) == 27:
break
cap.release()
cv2.destroyAllWindows()
2. 영상 프레임 보여주고 저장
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("Camera open failed!")
exit()
def put_string(frame, text, pt, value, color=(120, 200, 90)):
text += str(value)
shade = (pt[0] + 2, pt[1] + 2)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(frame, text, shade, font, 2, (0, 0, 0), 2)
cv2.putText(frame, text, pt, font, 2, (120, 200, 90), 2)
cv2.namedWindow("frame", cv2.WINDOW_NORMAL)
cv2.resizeWindow("frame", 640, 480)
while True:
ret, frame = cap.read()
if ret == False:
break
W = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
H = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
C = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
F = round(cap.get(cv2.CAP_PROP_FPS), 3)
put_string(frame, "Width: ", (250, 50), W)
put_string(frame, "Height: ", (250, 100), H)
put_string(frame, "Count: ", (250, 150), C)
put_string(frame, "FPS: ", (250, 200), F)
cv2.imshow('frame', frame)
if cv2.waitKey(10) == 27:
break
cap.release()
cv2.destroyAllWindows()
3. 영상 파일에 저장
cap = cv2.VideoCapture(0)
if cap.isOpened():
file_path = 'images/record001.avi'
fps = 25.40
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
size = (int(width), int(height))
out = cv2.VideoWriter(file_path, fourcc, fps, size)
else:
print("Camera open failed!")
exit()
print('Frame width:', int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
print('Frame height:', int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('Frame count:', int(cap.get(cv2.CAP_PROP_FRAME_COUNT)))
print('FPS:', cap.get(cv2.CAP_PROP_FPS))
cv2.namedWindow("frame", cv2.WINDOW_NORMAL)
cv2.resizeWindow("frame", 640, 480)
while True:
ret, frame = cap.read()
if ret == False:
break
cv2.imshow('frame', frame)
out.write(frame)
if cv2.waitKey(10) == 27: #esc의 아스키 코드로 esc 누르면 꺼지게 코드
break
out.release()
cv2.destroyAllWindows()
4. 행렬처리
image = cv2.imread("images/flip_test.jpg",cv2.IMREAD_COLOR) # color 영상 읽기
if image is None:
raise Exception("영상파일읽기 오류발생") # 예외 처리
x_axis = cv2.flip(image, 0) # 0 → x축 기준 상하 뒤집기
y_axis = cv2.flip(image, 1) # 1 → y축 기준 좌우 뒤집기
xy_axis = cv2.flip(image, -1) # -1 → x, y축 기준 모두 뒤집기
rep_image12 = cv2.repeat(image, 1, 2) # 1 × 2 반복 복사
rep_image21 = cv2.repeat(image, 2, 1) # 2 × 1 반복 복사
trans_image = cv2.transpose(image) # 행렬 전치
titles = ['image', 'x_axis','y_axis', 'xy_axis',
'rep_image12','rep_image21' ,'trans_image']
for title in titles:
cv2.imshow(title, eval(title)) # eval()
cv2.waitKey(0)
cv2.destroyAllWindows()
5. 컬러채널 분리 및 합성
image = cv2.imread( "images/logo.jpg", cv2.IMREAD_COLOR)
if image is None:
raise Exception("영상 파일 읽기 오류 발생")
if image.ndim != 3:
raise Exception("컬러 영상 아님")
b, g, r = cv2.split(image)
print(image.shape)
zeros = np.zeros((image.shape[:2]), # (360, 480, 3)
dtype="uint8")
b = cv2.merge([b, zeros, zeros])
g = cv2.merge([zeros, g, zeros])
r = cv2.merge([zeros, zeros, r])
cv2.imshow("image", image)
cv2.imshow("Blue channel" , b)
cv2.imshow("Green channel", g)
cv2.imshow("Red channel" , r)
cv2.waitKey()
cv2.destroyAllWindows()
6. 행렬 비트 연산
image1 = np.zeros((300, 300), np.uint8)
image2 = image1.copy()
h, w = image1.shape[:2] # 300, 300
cx,cy = w//2, h//2 # 150, 150
cv2.circle(image1, (cx,cy), 100, 255, -1)
cv2.rectangle(image2, (0, 0, cx, h), 255, -1) # (pt, w, h)
image3 = cv2.bitwise_or(image1, image2)
image4 = cv2.bitwise_and(image1, image2)
image5 = cv2.bitwise_xor(image1, image2)
image6 = cv2.bitwise_not(image1)
cv2.imshow("image1", image1)
cv2.imshow("image2", image2)
cv2.imshow("bitwise_or", image3)
cv2.imshow("bitwise_and", image4)
cv2.imshow("bitwise_xor", image5)
cv2.imshow("bitwise_not", image6)
cv2.waitKey(0)
cv2.destroyAllWindows()
6-1 행렬 비트 연산
import cv2
import numpy as np
image = cv2.imread("images/bit_test_star.jpg", cv2.IMREAD_COLOR)
logo = cv2.imread("images/logo.jpg", cv2.IMREAD_COLOR)
if image is None or logo is None:
raise Exception("영상 파일 읽기 오류")
image2 = image.copy() # image를 image2로 복사
# cv2.THRESH_BINARY → 이진화
masks = cv2.threshold(logo, 220, 255, cv2.THRESH_BINARY)[1] # 220보다 작으면 0, 220보다 크면 255masks = cv2.split(masks) # 3채널 컬러 행렬을 분리
masks = cv2.split(masks) # 3 채널 컬러 행렬을 분리
fg_pass_mask = cv2.bitwise_or(masks[0], masks[1]) # b채널 or g채널
fg_pass_mask = cv2.bitwise_or(masks[2], fg_pass_mask) # (b채널 or g채널) or r채널
bg_pass_mask = cv2.bitwise_not(fg_pass_mask) # not (b채널 or g채널 or r채널)
(H, W), (h, w) = image.shape[:2], logo.shape[:2] # image, logo → height, width
x, y = (W-w)//2, (H - h)//2 # 시작좌표(x, y) 계산
roi = image[y:y+h, x:x+w] # 관심영역 설정
roi2 = image2[y:y+h, x:x+w].copy() # roi를 roi2로 복사
foreground = cv2.bitwise_and(logo, logo, mask=fg_pass_mask)
background = cv2.bitwise_and(roi , roi , mask=bg_pass_mask)
bfa = cv2.add(background, foreground)
image2[y:y+h, x:x+w] = bfa
cv2.imshow("image", image)
cv2.imshow("logo", logo)
cv2.imshow("roi", roi)
cv2.imshow("roi2", roi2)
cv2.imshow("fg_pass_mask", fg_pass_mask)
cv2.imshow("bg_pass_mask", bg_pass_mask)
cv2.imshow("background", background)
cv2.imshow("forground", foreground)
cv2.imshow("bfa", bfa)
cv2.imshow("image2", image2)
cv2.waitKey()
cv2.destroyAllWindows()
6-2 행렬 비트 연산
import cv2
import numpy as np
img = cv2.imread('images/girl.jpg')
if img is None:
raise Exception("영상 파일 읽기 오류 발생")
mask = np.zeros_like(img) # np.zeros_like(img) → img와 같은 shape로 0 행렬
cv2.circle(mask, (150,140), 100, (255,255,255), -1) #cv2.circle(img, (x, y), radius, (color), thickness)
masked = cv2.bitwise_and(img, mask)
cv2.imshow('original', img)
cv2.imshow('mask', mask)
cv2.imshow('masked', masked)
cv2.waitKey()
cv2.destroyAllWindows()
6-3 행렬 비트 연산
fore = cv2.imread('images/airplane.bmp', cv2.IMREAD_COLOR)
mask = cv2.imread('images/mask_plane.bmp', cv2.IMREAD_GRAYSCALE)
back = cv2.imread('images/field.bmp', cv2.IMREAD_COLOR)
if fore is None or mask is None or back is None:
raise Exception("영상 파일 읽기 오류 ")
cv2.imshow('fore', fore)
cv2.imshow('mask', mask)
cv2.imshow('back', back)
final = cv2.copyTo(fore, mask, back)
cv2.imshow('final', final)
cv2.waitKey()
cv2.destroyAllWindows()
'컴퓨터비전&AI' 카테고리의 다른 글
[배울랑교AI] 이미지 처리 (0) | 2024.11.27 |
---|---|
[배울랑교AI] 영상 처리 (0) | 2024.11.27 |
[배울랑교 AI] 컴퓨터 비전 기능을 구현 (0) | 2024.11.27 |
[AI 과제] 회귀 및 분류 모델을 통한 데이터 분석 및 시각화 (0) | 2024.11.27 |
[AI 과제] 농구 선수 데이터셋 학습을 통해 포지션을 예측하는 모델, 크롤링 (3) | 2024.11.27 |