OpenCV có cấu trúc module, tức là nó bao gồm cả những thư viện liên kết tĩnh lẫn thư viện liên kết động. Nắm rõ các module của OpenCV sẽ giúp bạn đọc hoàn toàn thấu hiểu OpenCV là gì.
Core functionality (core): Module này sở hữu cơ chế rất nhỏ gọn. Nó được dùng để định hình các cấu trúc của cơ sở dữ liệu cơ bản, bao gồm cả những mảng đa chiều. Ngoài ra nó còn xác định các chức năng của những module đi kèm khác nữa.
Image Processing (imgproc): Đây là module được dùng cho quá trình xử lý hình ảnh. Nó cho phép người dùng thực hiện các hoạt động như lọc hình ảnh tuyến tính và phi tuyến, thực hiện phép biến hình, thay đổi không gian màu, xây dựng biểu đồ và rất nhiều thao tác khác liên quan.
Video Analysis (video): Giống như tên gọi của nó, module này cho phép phân tích các video. Kết quả được trả về bao gồm các ước tính chuyển động, thực hiện tách nền và các phép toán theo dõi vật thể.
Camera Calibration and 3D Reconstruction (calib3d): Module này cung cấp các thuật toán hình học đa chiều cơ bản và hiệu chuẩn máy ảnh single và stereo. Ngoài ra nó còn đưa ra các dự đoán kiểu dáng của đối tượng và sử dụng thuật toán thư tín âm thanh nổi cùng các yếu tố tái tạo 3D.
2D Features Framework (features2d): Module này giúp phát hiện các tính năng nổi trội của bộ nhận diện, bộ truy xuất thông số và thông số đối chọi.
Ngoài ra còn có rất nhiều module khác với đa dạng tính năng, ví dụ như: FLANN, Google test wrapper…
import cv2
path = './data/cat.jpg'
img = cv2.imread(path)
cv2.imshow('cat', img)
cv2.waitKey(1000)
cv2.destroyAllWindows()
# 이미지 색상공간 변환하기
# RGB (Red, green, blue) > Gray, RGBA, RSV
import cv2
path = './data/cat.jpg'
img = cv2.imread(path)
# 흑백으로 변환
img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
cv2.imshow('cat', img_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
path = './data/cat.jpg'
img = cv2.imread(path)
# 흑백으로 변환
img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
# 이진 이미지 변환 (흰색 or 검은색), 흑백사진에서 진행 가능
_, thr = cv2.threshold(img, 127,255, cv2.THRESH_BINARY)
cv2.imshow('cat', thr)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
path = './data/KakaoTalk_20240112_122826900_03.jpg'
img = cv2.imread(path)
# 사진 불러오기
# 1: 좌우 뒤집기
# 0: 상하 뒤집기
# -1: 상하좌우 뒤집기
img = cv2.flip(img,-1)
cv2.imshow('cat', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 카메라(동영상) 연결하기
import cv2
# 카메라 연결하기
# 경로: 동영상 연결하기
# 보통은 초단 30장의 사진이 출력
# 평균적인 사람은 12~ 15장에서 동영상이라고 인식
video = cv2.VideoCapture(0)
# 몇초의 영상 = 몇장의 사진이입력될지 모르니 while문
while video.isOpened():
# 한장의 사진 가져오기 시도
# ret = 가져오면 True,못가져오면 False
# img = 사진 값
ret , img = video.read()
# 만약 사진 못 가져오면 while문 종료
if not ret:
break
# 창의 이름, 창의 뛰울 이미지
cv2.imshow('img',img)
# 키 입력 대기 시간
# 30= 0.3초 동안 한 사진을 뛰우겠다 = 1초에 33장의 사진을 뛰우겠다
# 다른 코드들의 실행시간을 확보하기 위해서 일반적인 속도보다 조금 더 빠르게 실행
# while문 종료 버튼 만들기 =동영상 종료 버튼
k = cv2.waitKey(30) # ASCII코드로 값을 저장
if k ==49: # 1(!) 을 누르면 실행
break
# 연결되어있는 비디오(카메라) 종료
video.release()
# 원두우에 뛰운 창 종료
cv2.destroyAllWindows()
Press 1 to Exit
# 카메라(동영상) 연결하기
import cv2
# 카메라 연결하기
# 경로: 동영상 연결하기
# 보통은 초단 30장의 사진이 출력
# 평균적인 사람은 12~ 15장에서 동영상이라고 인식
video = cv2.VideoCapture(0)
# 몇초의 영상 = 몇장의 사진이입력될지 모르니 while문
black = False
flip0 = False
flip1 = False
flip2 = False
thr = False
while video.isOpened():
# 한장의 사진 가져오기 시도
# ret = 가져오면 True,못가져오면 False
# img = 사진 값
ret , img = video.read()
# 만약 사진 못 가져오면 while문 종료
if not ret:
break
# 키 입력 대기 시간
# 30= 0.3초 동안 한 사진을 뛰우겠다 = 1초에 33장의 사진을 뛰우겠다
# 다른 코드들의 실행시간을 확보하기 위해서 일반적인 속도보다 조금 더 빠르게 실행
# while문 종료 버튼 만들기 =동영상 종료 버튼
k = cv2.waitKey(30) # ASCII코드로 값을 저장
if k ==49: # 1(!) 을 누르면 실행
break
# 흑백으로 이미지 변경(2-@)
elif k == 50:
# 한장의 사진만 흑백으로 변경
black = not black
# 이진이미지 변경 (3-#)
elif k ==51:
thr = not thr
#좌우 반전 (4-$)
elif k == 52:
flip0 = not flip0
# 상하 반전 (5)
elif k ==53:
flip1 = not flip1
# 상하좌우반전(6)
elif k ==54:
flip2 = not flip2
if black : #2 번이 눌리고난 다음부터 실행
img = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
# 창의 이름, 창의 뛰울 이미지
if thr:
_, img = cv2.threshold(img, 127,255, cv2.THRESH_BINARY)
if flip0:
img = cv2.flip(img,1)
if flip1:
img = cv2.flip(img,0)
if flip2:
img = cv2.flip(img,-1)
cv2.imshow('img',img)
# 연결되어있는 비디오(카메라) 종료
video.release()
# 원두우에 뛰운 창 종료
cv2.destroyAllWindows()
import cv2
video = cv2.VideoCapture(0)
cnt = 0
while video.isOpened():
ret, img = video.read()
if not ret:
break
k = cv2.waitKey(30)
if k == 49:
break
elif k ==50:# 순간화면 캡쳐 후 저장
# 저장될 위치, 사진, 속성
cv2.imwrite(f'./data/capture{cnt}.png', img, params=[cv2.IMWRITE_PNG_COMPRESSION, 0])
cnt+=1
cv2.imshow('img',img)
video.release()
cv2.destroyAllWindows()