Deep Learning - OPENCV 사용하기 - 동영상 제작 🐱‍🚀, 이미지 처리

화이티 ·2024년 1월 17일
0

Deep Learning

목록 보기
18/24
  1. 카메라 연결하기
  2. 종료버튼
  3. 녹화 시작 버튼
  4. 녹화 종료 버튼

이미지 Capture-> 동영상 만들기

# 동영상 만들기
import cv2
fps = 10 # 1초에 10장 사진 사용
# width, height
# 코덱
fcc = cv2.VideoWriter_fourcc(*'DIVX')
# 코덱 DIVX = avi, MGEG = mp4
# 동영상 파일 생성
out = cv2.VideoWriter('./data/sample.mp4',fcc, fps, (width, height))
# 사진번호 확인 0~ 47
for i in range(48):
    # 사진 불로오기
    img = cv2.imread(f'./data/capture{i}')
    #동영상에 사진파일 쓰기
    out.write(img)
# 동영상 파일 제작 완료
out.release()

동영상 녹화

# 동영상 만들기
import cv2
fps = 10 # 1초에 10장 사진 사용
# width, height
# 코덱
fcc = cv2.VideoWriter_fourcc(*'DIVX')
# 코덱 DIVX = avi, MGEG = mp4
# 동영상 파일 생성

video = cv2.VideoCapture(0)
width = int(video.get(3))
height = int(video.get(4))
record = False # 녹화 여부
while video.isOpened():
    ret, img = video.read()
    if not ret:
        break
    k= cv2.waitKey(30)
    #2. 종료버튼
    if k==49:
        break
    
    #3. 녹화 시작
    elif k ==50:
        out = cv2.VideoWriter('./data/sample2.mp4',fcc, fps, (width, height))
        record = True
    #4. 녹화 종료
    elif k ==51:
        record = False
        out.release() # 동영상 녹화 종료

    #동영상 객체에 사진 저장
    if record:
        out.write(img)
    cv2.imshow('img',img)
video.release()
video.destroyAllWindows()

이미지 처리

  • cv2.line(배경이미지, 시작점좌표, 끝점좌표, 색상, 선두께) : 직선 그리기 함수
  • cv2.circle(배경이미지, 중심좌표, 반지름, 색상, 선두께) : 원 그리기 함수
  • cv2.rectangle(배경이미지, 좌상단점좌표, 우하단점좌표, 색상, 선두께) : 사각형 그리기 함수
  • cv2.ellipse(배경이미지, 중심좌표, 장축/단축길이, 호의시작각, 호의 종료각, 색상, 선두께) : 타원 그리기 함수
  • cv2.putText(배경이미지, 출력내용, 출력시작좌표, 폰트, 크기, 색상, 굵기) : 텍스트 입력 함수

픽셀값 바꾸기


# 픽셀값 바꾸기
# 왼쪽 상단이 0,0
import cv2
img= cv2.imread('./data/kangdaniel.jpg')
# 행(y) , 열 (x)

img[250,350] = [0,0,0]
img[251,350] = [0,0,0]# x겂 1 더함
img[250,351] = [0,0,0]# y겂 1 더함
img[251,351] = [0,0,0]# x,y 겂 1 더함

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

ROI(Region of Image) = 관심영역

import cv2
img= cv2.imread('./data/kangdaniel.jpg')
sub_img = img[100:370,250:500]
cv2.imshow('daniel',sub_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

도형 그리기(선, 원, 사각형, 타원, 글씨 - rectangle

import cv2
img= cv2.imread('./data/kangdaniel.jpg')
# 슬라이싱 [ㅎ행의 y 범위, 열의 x범위]
# ROI(Region of Image) = 관심영역

# 도형 그리기(선, 원, 사각형, 타원, 글씨
# cv2.retangle(사용할 이미지, 좌 상단좌표(x,y), 우 하단좌표(x,y), 선위 색깔(RGB - 0,0,255), 두께 사각형 그리기
cv2.rectangle(img,(250,100),(500,450),(0,0,255),3)
# sub_img = img[100:370,250:500]
cv2.imshow('daniel',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

ROI BLUR 처리하기 - filter2D

# ROI Blur 처리하기
import cv2
import numpy as np
img= cv2.imread('./data/kangdaniel.jpg')

sub_img = img[150:370,250:500]
# 잘라온 이미지 모자이크 처리하기
# blur = 흐리게 만들기
kernel = np.ones((5,5), np.float32)/25
blur = cv2.filter2D(sub_img, -1, kernel)
cv2.imshow('daniel',img)
cv2.imshow('daniel_face',sub_img)
cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

import cv2
import numpy as np
img= cv2.imread('./data/kangdaniel.jpg')

sub_img = img[150:370,250:500]
# 잘라온 이미지 모자이크 처리하기
# blur = 흐리게 만들기
# 주변에 있는 픽셀들과 색이 비슷해져서 흐려지는 효과를 갖는다
kernel = np.ones((7,7), np.float32)/25
blur = cv2.filter2D(sub_img, -1, kernel)
# 블러처리한 이미지 원본사진에 넣기
img[150:370,250:500] = blur

cv2.imshow('daniel',img)
cv2.imshow('daniel_face',sub_img)
cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

import cv2
img= cv2.imread('./data/kangdaniel.jpg')
tiger= cv2.imread('./data/tiger.png')

img[250:250+tiger.shape[0],300:300+tiger.shape[1]] = tiger
cv2.imshow('daniel',img) 
cv2.waitKey(0)
cv2.destroyAllWindows()

# 횐색 배경
import cv2
img= cv2.imread('./data/kangdaniel.jpg')
tiger= cv2.imread('./data/tiger.png')
# 1. 호랑이 이미지 이진화하기 (쓸 영역과 안쓸영역 구분하기- 마스크 이미지 만들다)
mask2gray = cv2.cvtColor(tiger, cv2.COLOR_RGB2GRAY)
_, mask_b = cv2.threshold(mask2gray, 200, 255, cv2.THRESH_BINARY)
# 2. 사용할영역(흰색 = 1), 사용안할영역(검은색 =0)으로 변경
mask_b_inv = cv2.bitwise_not(mask_b)
# 3. 호랑이 이미지에서 흰색 영역만 추출
img_fg = cv2.bitwise_and(tiger, tiger, mask = mask_b_inv)
cv2.imshow('tiger_mask', img_fg)


cv2.waitKey(0)
cv2.destroyAllWindows()

bitwise_and, bitwise_not

# 횐색 배경
import cv2
img= cv2.imread('./data/kangdaniel.jpg')
tiger= cv2.imread('./data/tiger.png')
# 1. 호랑이 이미지 이진화하기 (쓸 영역과 안쓸영역 구분하기- 마스크 이미지 만들다)
mask2gray = cv2.cvtColor(tiger, cv2.COLOR_RGB2GRAY)
_, mask_b = cv2.threshold(mask2gray, 200, 255, cv2.THRESH_BINARY)
# 2. 사용할영역(흰색 = 1), 사용안할영역(검은색 =0)으로 변경
mask_b_inv = cv2.bitwise_not(mask_b)
# 3. 호랑이 이미지에서 흰색 영역만 추출
img_fg = cv2.bitwise_and(tiger, tiger, mask = mask_b_inv)
# 4. 배경이미지에서 호랑이 이미지가 쒸위질 영역의 투명영역값을 추출

# ROI 배경에서 호랑이 마스트가 들어걸 영역
roi = img[250:250+tiger.shape[0],300:300+tiger.shape[1]]

# 호랑이 마스크를 제외항 값 가져오기
img_bg = cv2.bitwise_and(roi,roi, mask = mask_b)

#img[250:250+tiger.shape[0],300:300+tiger.shape[1]] = img_fg

# 5. 호랑이 마스크, 배경에서 호랑이 제외한값 합치기
bg_fg = cv2.add(img_bg, img_fg)
#6. 합친값을 원래 위치에 붙히기
img[250:250+tiger.shape[0],300:300+tiger.shape[1]] = bg_fg
cv2.imshow('tiger_mask', img_fg)
cv2.imshow('daniel',img)
cv2.imshow('daniel_mask',img_bg)
cv2.waitKey(0)
cv2.destroyAllWindows()

profile
열심히 공부합시다! The best is yet to come! 💜

0개의 댓글

관련 채용 정보