<jupyter_start><jupyter_text>1. OpenCV 시작하기 필요한 라이브러리 불러오기<jupyter_code>%matplotlib inline
import cv2
from matplotlib import pyplot as plt
import numpy as np
import time as t

cv2.__version__<jupyter_output><empty_output><jupyter_text>이미지 불러와서 표시<jupyter_code>PATH = 'images/green.jpg'
image = cv2.imread(PATH)

plt.figure(figsize=(10,10))
plt.title(PATH)
plt.axis('off')
plt.imshow(image)
plt.show()<jupyter_output><empty_output><jupyter_text>카메라 이미지 캡쳐<jupyter_code>## 카메라 장치 초기화
cam = cv2.VideoCapture(0)

## 프레임 가져오기
ret, frame = cam.read()

## 색 배열 변환 :: BGR --> RGB
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

## 화면 출력
plt.figure(figsize=(10,10))
plt.title('usb-cam')
plt.axis('off')
plt.imshow(rgb)
plt.show()

## 카메라 릴리즈
cam.release()<jupyter_output><empty_output><jupyter_text>카메라 동영상 재생* 키보드 인터럽스 발생시 재생중지 : ```메뉴 > Kernel > Interrupt``` 또는 ```i 키``` 두번 입력<jupyter_code>## https://github.com/bikz05/ipython-notebooks/blob/master/computer-vision/displaying-video-in-ipython-notebook.ipynb
# Import the required modules
%pylab inline 
import cv2
from IPython.display import clear_output

# Grab the input device, in this case the webcam
# You can also give path to the video file
vid = cv2.VideoCapture(0)

# Put the code in try-except statements
# Catch the keyboard exception and 
# release the camera device and 
# continue with the rest of code.
try:
    while(True):
        # Capture frame-by-frame
        ret, frame = vid.read()
        if not ret:
            # Release the Video Device if ret is false
            vid.release()
            # Message to be displayed after releasing the device
            print("Released Video Resource")
            break
        # Convert the image from OpenCV BGR format to matplotlib RGB format
        # to display the image
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        # Turn off the axis
        axis('off')
        # Title of the window
        title("Input Stream")
        # Display the frame
        imshow(frame)
        show()
        # Display the frame until new frame is available
        clear_output(wait=True)
except KeyboardInterrupt:
    # Release the Video Device
    vid.release()
    # Message to be displayed after releasing the device
    print("Released Video Resource")<jupyter_output><empty_output><jupyter_text>도형 그리기 * 사용함수 : ```cv2.line(), cv2.circle() , cv2.rectangle(), cv2.ellipse(), cv2.putText()```* img : 화면에 그릴 도형 객체* color : BGR형식의 컬러는 (255, 0, 0)과 같이 표시, 흑백이미지는 스칼라값(숫자)로 표시**왜인지는 모르겟지만, opencn4-python 에서는 RGB로 처리가 되고 있는듯함*** thickness : 선의 두께. 폐곡선의 경우 -1의 입력하면 안에 채우기함. 기본값은 +1* lineType : 선 유형. [8-connected(가로/세로/대각선 단순연결)](http://www.imageprocessingplace.com/downloads_V3/root_downloads/tutorials/contour_tracing_Abeer_George_Ghuneim/connect.html) 또는 [anti-alised(경계를 부드럽게 뭉개서 연결?)](https://www.html5rocks.com/en/tutorials/internals/antialiasing-101/)함. 기본값 8-connected<jupyter_code># 배경을 검은색으로 채우고
img = np.zeros((512,512,3), np.uint8)

# 두께 5짜리 빨간색 선 그림
# color가 RGB순서인듯!!!
img = cv2.line(img,(0,0),(511,511),(255,0,0),5)

# 두께 3짜리 초속색 선 그림
img = cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)

# 속이 꽉 찬 원 그림
img = cv2.circle(img,(447,63), 63, (0,0,255), -1)

# 타원 그림
# 중심점(256,256), 장축/단축(100,50), 도형회전(0), 시작각도(45), 끝 각도(270), 색상(255,255,0), 선 두께(-1 : 채우기)
img = cv2.ellipse(img,(256,256),(100,50),0,45,270,(255,255,0),-1)

# 다각형 그림
# ROWS*1*2 형식의 배열로 변경해서 그림, ROW는 꼭지점(vertex) 갯수
pts = np.array([[10,5],[120,230],[270,120],[150,10]], np.int32) 
pts = pts.reshape((-1,1,2))
img = cv2.polylines(img,[pts],True,(0,255,255))

# 텍스트 표시
# 텍스트, 시작점(10, 500), 폰트, 글씨크기(1), 색상(255,255,255), 두께, 선유형(Antialised해줘야 텍스트가 이쁨)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'Drawing text sample 한글',(10,500), font, 1, (255,255,255), 2, cv2.LINE_AA)

# 화면에 표시
plt.figure(figsize=(10,10))
plt.axis('off')
plt.title('opencv drawings')
plt.imshow(img)
plt.show()<jupyter_output><empty_output><jupyter_text>성능측정* **cv2.getTickCount** : 부팅 이후 clock-cycle 수 반환* **cv2.getTickFrequency** : 초당 clock-cycle 수<jupyter_code>%config IPCompleter.greedy=True
PATH = 'images/green.jpg'
image = cv2.imread(PATH)

# 성능측정 시작
e1 = cv2.getTickCount()

# 블러효과 주기
blur = cv2.blur(image,(20,20))

# 성능측정 종료
e2 = cv2.getTickCount()
time = (e2 - e1)/ cv2.getTickFrequency()

plt.figure(figsize=(10,10))
plt.title(PATH)
plt.axis('off')
plt.title('blur : {}ms'.format(time))
plt.imshow(image)
plt.show()<jupyter_output><empty_output><jupyter_text>이미지 두개를 한화면에 표시* `matplotlib`의 서브플롯을 이용해 표시함* 서브플롯의 순서는 왼쪽 위부터 오른쪽 행방향우선으로 넘버링<jupyter_code>img1 = cv2.imread('images/green.jpg')
img2 = cv2.imread('images/phone.jpg')

# 가로20 * 세로10 패널 생성 
plt.figure()
fig = plt.figure(figsize=(20,10))

# 1행2열 서브플롯을 생성하고 첫번째 패널에 이미지 표시
ax1 = fig.add_subplot(1, 2, 1)
ax1.axis('off')
ax1.imshow(img1)

# 1행2열 서브플롯을 생성하고 두번째 패널에 이미지 표시
ax2 = fig.add_subplot(1, 2, 2)
ax2.axis('off')
ax2.imshow(img2)

plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1515089722675367, 'fraction_numerical': 0.05587275693311582, 'mean_word_length': 4.337323177366703, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 32, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '246631', 'license': 'Apache-2.0', 'n_tokens_mistral': 2591, 'n_tokens_neox': 2776, 'n_words': 461, 'path': 'OpenCV-Python-01-Introduction.ipynb', 'repo_name': 'ivorycirrus/opencv-notebook', 'size': '4904'}