openCV

2024. 6. 19. 17:41Jetson

 

✅ 이미지

!pip3 install opencv-python # opencv 설치하는 코드
import cv2

img = cv2.imread('Handle.png', -1) # 첫번째 입력값 : 경로를 포함한 이미지 정보
                                  # 두번째 입력값 : 0, 1, -1 -> 이미지를 읽는 방식
                                  # 0 : 흑백 / 1 :컬러 / -1 : 원래 이미지의 상태(원본)

# print(img)

print(type(img))

import ipywidgets

ipywidgets.Audio()

import ipywidgets # 파이썬에서 위젯을 사용할 수 있는 라이브러리

from IPython.display import display # 실제 이미지를 display할 수 있는 라이브러리

img_widget = ipywidgets.Image(format = 'png')

cv2.imencode('.png', img) # 리스트 형태로 출력
                          # -> 0번 인덱스 -> 결과 값이 있으면 true / or false,
                          # -> 1번 인덱스 -> 실제 데이터

img_widget.value = cv2.imencode('.png', img)[1].tostring()

display(img_widget)

 

✅ 동영상

ls /usr/share/visionworks/sources/data

cp /usr/share/visionworks/sources/data/pedestrians.mp4 /home/jetbot/AIoT_jetbot

import cv2
import ipywidgets as widgets # 파이썬 위젯 만들기

from IPython.display import display # 실제 이미지를 display할 수 있는 라이브러리

cap = cv2.VideoCapture('pedestrians.mp4') # 동영상 파일 불러와서 비디오 객체 생성(capture) -> capture(동영상을 캡쳐캡쳐해서 확인)

print(cap.isOpened()) # True -> 정상적으로 불러와졌다

import time

if cap.isOpened():
#     print(cap.read())
    ret, img = cap.read() # ret -> cap 객체를 순차적으로 읽어서 저장, 읽을게 있다면 True / or False
    
    while ret: # ret == True
        img_widget.value = cv2.imencode(".jpeg", img)[1].tostring() # 배열의 형태를 문자열로!
        time.sleep(0.1)
        
        ret, img = cap.read() # 반복문이 끝나기 전 프레임을 다시 받아들일건지 결정
cap.release()
img_widget = widgets.Image()
display(img_widget)

 

✅ OpenCV 활용해서 이미지에 도형 그리기, 글씨 쓰기

  • 선, 원, 직선, 텍스트
  • 색깔의 배열 순서가 RGB가 아닌 BGR이다!

import cv2

img = cv2.imread('Handle.png', -1)
import ipywidgets

from IPython.display import display

img_widget = ipywidgets.Image(format = 'png')

cv2.imencode('.png', img)

img_widget.value = cv2.imencode('.png', img)[1].tostring()

display(img_widget)

!pip3 install matplotlib

import matplotlib.pyplot as plt

img = cv2.imread('Handle.png', 1)

img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) # RGB -> BGR

plt.imshow(img)

# x1, y1 : 좌상단 / x2, y2 : 우상단

# 1. 선 그리기 -> line(img, (x1, y1), (x2, y2), (B,G,R), 두께)

cv2.line(img, (0, 150), (700, 500), (255, 0, 0), 5)

# 2. 직사각형 그리기 -> rectangle(img, (x1, y1), (x2, y2), (B,G,R), 두께)

cv2.rectangle(img, (0, 150), (700, 500), (0, 0, 255), 3)

# 3. 원 그리기 -> circle(img, (x1, y1), (x2, y2), (B,G,R), 두께) : 음수 -> 원 채우기 / 양수 -> 외곽선

cv2.circle(img, (200, 300), 100, (255, 255, 0), -3)

# 4. 텍스트 -> putText(img "텍스트", 위치, 글씨체, 글씨크기, (B,G,R), 두께)

cv2.putText(img, 'JETBOT', (200, 150), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, 3, (0, 255, 0), 10)

import ipywidgets

from IPython.display import display

img_widget = ipywidgets.Image(format = 'png')

cv2.imencode('.png', img)

img_widget.value = cv2.imencode('.png', img)[1].tostring()

display(img_widget)

 

'Jetson' 카테고리의 다른 글

Face Tracking  (1) 2024.06.21
Cat Detection  (0) 2024.06.20
FaceDetection  (0) 2024.06.20
Buzzer와 RGBstrip  (0) 2024.06.19
LED와 Button  (0) 2024.06.18