OpenCV 이미지 로딩 시 주의점
OpenCV에서 imread('파일명')을 이용하여 넘파이 array형태로 가져온다. 이때 RGB형태가 아닌 BGR형태로 로딩하기 때문에 cvtColor(이미지 배열, cv2.COLOR_BGR2RGB)를 이용하여 다시 RGB형태로 바꿔준다.
OpenCV를 활용하여 이미지 보이기
OpenCV의 imread()로 반환된 BGR 이미지 넘파이 배열을 그대로 시각화 하기
import cv2
cv2_image = cv2.imread('/content/data/beatles01.jpg')
#cv2_image : numpy array 형태, BGR
plt.figure(figsize=(10, 10))
plt.imshow(cv2_image)
plt.show()
imwrite()를 활용하여 RGB형태로 반환 후 보이기
import cv2
cv2_image = cv2.imread('/content/data/beatles01.jpg')
#cv2_image : numpy array 형태, BGR
cv2.imwrite('/content/data/beatles02_cv.jpg', cv2_image)
#cv2.imwrite(RGB형태로 여기에 저장한다,이 이미지를)
print('cv_image type:', type(cv2_image), ' cv_image shape:', cv2_image.shape)
plt.figure(figsize=(10, 10))
img = plt.imread('/content/data/beatles02_cv.jpg') #RGB형태
plt.imshow(img)
#plt.show()
cvtColor()를 활용하여 RGB형태로 반환 후 보이기
cv2_image = cv2.imread('/content/data/beatles01.jpg')
draw_image = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2RGB)
plt.figure(figsize=(10, 10))
plt.imshow(draw_image)
plt.show()
원본영상에 바운딩박스 시각화한 새로운 영상 만들기
# 0. 준비 : import cv2
import cv2
# 1. video_input_path = '원본영상 파일 경로'
video_input_path = '/content/data/Night_Day_Chase.mp4'
# linux에서 video output의 확장자는 반드시 avi 로 설정 필요.
# 2. video_output_path = ' 새로운 영상 파일 경로 지정'
video_output_path = '/content/data/Night_Day_Chase_out.mp4'
# 3. VidepCapture 클래스를 활용하여 객체 만들기 -> 이후 cap 객체는 영상의 높이, 너비, fps등의 정보를 얻기 위해서 쓰임
cap = cv2.VideoCapture(video_input_path)
# Codec은 *'XVID'로 설정.
#codec : 비디오 파일을 압축(인코딩), 압축 해제(디코딩)에 필요함
# 4. codec = cv2.VideoWriter_fourcc(*'원하는 코덱 종류') ex : XVID, H.264 등등
codec = cv2.VideoWriter_fourcc(*'XVID')
# 5. 영상의 너비, 높이 구하기
vid_size = (round(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) #(200, 400)
# 6. 영상의 FPS 구하기
vid_fps = cap.get(cv2.CAP_PROP_FPS )
# 7. 원본을 편집해서 다시 만들어주는 역할을 하는 VideoWriter 설정하기
vid_writer = cv2.VideoWriter(video_output_path, codec, vid_fps, vid_size)
#8. 바운딩 박스 색깔, 그 위에 텍스트 색깔 설정
green_color=(0, 255, 0)
red_color=(0, 0, 255)
# 모든 이미지 프레임에 대하여
index=0
while True:
hasFrame, img_frame = cap.read() #img_frame : 영상이 칼라면 numpy 3차원 배열
if not hasFrame:
print('더 이상 처리할 frame이 없습니다.')
break
index += 1
print('frame :', index, '처리 완료')
cv2.rectangle(img_frame, (300, 100, 800, 400), color=green_color, thickness=2)
#(300, 100, 800, 400) 은 임의로 설정한 바운딩 박스 좌표, 나중에 yolo등을 통해
#바운딩박스 좌표를 얻어낸 후 이 자리에 넣으면 돼
# "frame:{}".format(넣고싶은 수)
caption = "frame:{}".format(index)
#cv2.putText(img_frame, caption, 텍스트 위치, 사용할 폰트, 텍스트 크기, 텍스트 색상, 1)
cv2.putText(img_frame, caption, (300, 95), cv2.FONT_HERSHEY_SIMPLEX, 0.7, red_color, 1)
#지금까지 바운딩박스와 텍스트를 표시한 화면(img_frame)으로 새 영상을 만들기
vid_writer.write(img_frame)
#사용한 객체들 해제
vid_writer.release()
cap.release()
Reference
'컴퓨터비전' 카테고리의 다른 글
Object Detection 네트워크 개괄 (0) | 2024.03.01 |
---|---|
MS-COCO 데이터 세트의 이해 (0) | 2024.02.21 |
Pascal VOC 데이터 세트 탐색하기 (0) | 2024.02.20 |
Object Detection 주요 데이터 세트 소개 및 Pascal VOC 데이터 세트의 이해 (0) | 2024.02.20 |
Object Detection 성능 평가 지표 mAP with 정밀도와 재현율 (0) | 2024.02.17 |