유용한 함수들을 소개하겠습니다.
51. cv2.matchShapes
두 개의 도형의 유사도를 비교하는 함수입니다.
# 도형 유사도 비교
contour1 = cv2.findContours(image1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
contour2 = cv2.findContours(image2, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
match = cv2.matchShapes(contour1[0], contour2[0], cv2.CONTOURS_MATCH_I1, 0.0)
print('Shape match:', match)
52. cv2.getGaborKernel
가보 필터 커널을 생성하는 함수입니다.
# 가보 필터 커널 생성
ksize = 31
sigma = 4.0
theta = np.pi / 4
lambd = 10.0
gamma = 0.5
gabor_kernel = cv2.getGaborKernel((ksize, ksize), sigma, theta, lambd, gamma, 0, ktype=cv2.CV_32F)
filtered_image = cv2.filter2D(image, cv2.CV_8UC3, gabor_kernel)
cv2.imshow('Gabor Filtered Image', filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
53. cv2.createCLAHE
CLAHE (Contrast Limited Adaptive Histogram Equalization) 객체를 생성하는 함수입니다.
# CLAHE 적용
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
cl1 = clahe.apply(gray_image)
cv2.imshow('CLAHE Image', cl1)
cv2.waitKey(0)
cv2.destroyAllWindows()
54. cv2.getAffineTransform
세 개의 점을 사용하여 아핀 변환 행렬을 계산하는 함수입니다.
# 아핀 변환 행렬 계산
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
pts2 = np.float32([[10, 100], [200, 50], [100, 250]])
M = cv2.getAffineTransform(pts1, pts2)
dst = cv2.warpAffine(image, M, (cols, rows))
cv2.imshow('Affine Transform', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
55. cv2.getPerspectiveTransform
네 개의 점을 사용하여 원근 변환 행렬을 계산하는 함수입니다.
# 원근 변환 행렬 계산
pts1 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
pts2 = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])
M = cv2.getPerspectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(image, M, (300, 300))
cv2.imshow('Perspective Transform', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
56. cv2.findContours
이미지에서 외곽선을 찾는 함수입니다.
# 외곽선 찾기
contours, hierarchy = cv2.findContours(gray_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(image, contours, -1, (0, 255, 0), 3)
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
57. cv2.approxPolyDP
외곽선을 다각형으로 근사화하는 함수입니다.
# 외곽선 다각형 근사화
epsilon = 0.02 * cv2.arcLength(contours[0], True)
approx = cv2.approxPolyDP(contours[0], epsilon, True)
cv2.drawContours(image, [approx], -1, (0, 255, 0), 3)
cv2.imshow('Approx Poly DP', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
58. cv2.convexHull
외곽선의 볼록 껍질을 계산하는 함수입니다.
# 외곽선 볼록 껍질 계산
hull = cv2.convexHull(contours[0])
cv2.drawContours(image, [hull], -1, (0, 255, 0), 3)
cv2.imshow('Convex Hull', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
59. cv2.boundingRect
외곽선을 감싸는 직사각형을 계산하는 함수입니다.
# 외곽선을 감싸는 직사각형 계산
x, y, w, h = cv2.boundingRect(contours[0])
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Bounding Rect', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
60. cv2.minAreaRect
외곽선을 감싸는 최소 면적의 직사각형을 계산하는 함수입니다.
# 최소 면적의 직사각형 계산
rect = cv2.minAreaRect(contours[0])
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(image, [box], 0, (0, 255, 0), 2)
cv2.imshow('Min Area Rect', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
61. cv2.minEnclosingCircle
외곽선을 감싸는 최소 면적의 원을 계산하는 함수입니다.
# 최소 면적의 원 계산
(x, y), radius = cv2.minEnclosingCircle(contours[0])
center = (int(x), int(y))
radius = int(radius)
cv2.circle(image, center, radius, (0, 255, 0), 2)
cv2.imshow('Min Enclosing Circle', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
62. cv2.fitEllipse
외곽선을 감싸는 타원을 계산하는 함수입니다.
# 타원 계산
ellipse = cv2.fitEllipse(contours[0])
cv2.ellipse(image, ellipse, (0, 255, 0), 2)
cv2.imshow('Fit Ellipse', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
63. cv2.fitLine
외곽선을 감싸는 직선을 계산하는 함수입니다.
# 직선 계산
[vx, vy, x, y] = cv2.fitLine(contours[0], cv2.DIST_L2, 0, 0.01, 0.01)
cols, rows = image.shape[:2]
lefty = int((-x * vy / vx) + y)
righty = int(((cols - x) * vy / vx) + y)
cv2.line(image, (cols-1, righty), (0, lefty), (0, 255, 0), 2)
cv2.imshow('Fit Line', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
64. cv2.phase
주파수 공간에서 각도를 계산하는 함수입니다.
# 주파수 공간 각도 계산
angle = cv2.phase(x, y, angleInDegrees=True)
print('Phase angle:', angle)
65. cv2.cartToPolar
직교 좌표를 극좌표로 변환하는 함수입니다.
# 직교 좌표를 극좌표로 변환
magnitude, angle = cv2.cartToPolar(x, y, angleInDegrees=True)
print('Magnitude:', magnitude)
print('Angle:', angle)
66. cv2.polarToCart
극좌표를 직교 좌표로 변환하는 함수입니다.
# 극좌표를 직교 좌표로 변환
x, y = cv2.polarToCart(magnitude, angle, angleInDegrees=True)
print('X:', x)
print('Y:', y)
67. cv2.merge
및 cv2.split
이미지 채널을 병합하고 분리하는 함수입니다.
# 채널 병합 및 분리
b, g, r = cv2.split(image)
merged_image = cv2.merge((b, g, r))
cv2.imshow('Merged Image', merged_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
68. cv2.mean
이미지의 평균 값을 계산하는 함수입니다.
# 이미지 평균 값 계산
mean_value = cv2.mean(image)
print('Mean value:', mean_value)
69. cv2.meanStdDev
이미지의 평균 값과 표준 편차를 계산하는 함수입니다.
# 평균 값과 표준 편차 계산
mean, stddev = cv2.meanStd
Dev(image)
print('Mean:', mean)
print('Standard Deviation:', stddev)
70. cv2.reduce
행 또는 열을 따라 이미지를 축소하는 함수입니다.
# 이미지 축소
reduced_image = cv2.reduce(image, dim=0, rtype=cv2.REDUCE_AVG)
cv2.imshow('Reduced Image', reduced_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
71. cv2.mergeEx
다양한 유형의 데이터 합병에 사용하는 함수입니다.
# 다양한 유형의 데이터 합병
merged_ex = cv2.mergeEx([img1, img2, img3])
cv2.imshow('Merged Ex', merged_ex)
cv2.waitKey(0)
cv2.destroyAllWindows()
72. cv2.rotate
이미지를 회전하는 함수입니다.
# 이미지 회전
rotated_image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
73. cv2.flip
이미지를 뒤집는 함수입니다.
# 이미지 뒤집기
flipped_image = cv2.flip(image, 1)
cv2.imshow('Flipped Image', flipped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
74. cv2.resize
이미지 크기를 조정하는 함수입니다.
# 이미지 크기 조정
resized_image = cv2.resize(image, (300, 300))
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
75. cv2.add
이미지를 합성하는 함수입니다.
# 이미지 합성
added_image = cv2.add(image1, image2)
cv2.imshow('Added Image', added_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
76. cv2.addWeighted
가중치를 주어 이미지를 합성하는 함수입니다.
# 가중치 합성
weighted_image = cv2.addWeighted(image1, 0.7, image2, 0.3, 0)
cv2.imshow('Weighted Image', weighted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
77. cv2.copyMakeBorder
이미지에 경계를 추가하는 함수입니다.
# 경계 추가
bordered_image = cv2.copyMakeBorder(image, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=[255, 0, 0])
cv2.imshow('Bordered Image', bordered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
78. cv2.warpAffine
이미지에 아핀 변환을 적용하는 함수입니다.
# 아핀 변환 적용
rows, cols = image.shape[:2]
M = np.float32([[1, 0, 100], [0, 1, 50]])
affine_image = cv2.warpAffine(image, M, (cols, rows))
cv2.imshow('Affine Transform', affine_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
79. cv2.warpPerspective
이미지에 원근 변환을 적용하는 함수입니다.
# 원근 변환 적용
rows, cols, ch = image.shape
pts1 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
pts2 = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])
M = cv2.getPerspectiveTransform(pts1, pts2)
perspective_image = cv2.warpPerspective(image, M, (300, 300))
cv2.imshow('Perspective Transform', perspective_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
80. cv2.erode
이미지의 침식 연산을 수행하는 함수입니다.
# 침식 연산
kernel = np.ones((5, 5), np.uint8)
eroded_image = cv2.erode(image, kernel, iterations=1)
cv2.imshow('Eroded Image', eroded_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
81. cv2.dilate
이미지의 팽창 연산을 수행하는 함수입니다.
# 팽창 연산
dilated_image = cv2.dilate(image, kernel, iterations=1)
cv2.imshow('Dilated Image', dilated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
82. cv2.morphologyEx
이미지의 모폴로지 변환을 수행하는 함수입니다.
# 모폴로지 변환
morphed_image = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('Morphed Image', morphed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
83. cv2.threshold
이미지에 임계값 처리를 수행하는 함수입니다.
# 임계값 처리
ret, thresh_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('Threshold Image', thresh_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
84. cv2.adaptiveThreshold
이미지에 적응형 임계값 처리를 수행하는 함수입니다.
# 적응형 임계값 처리
adaptive_thresh_image = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
cv2.imshow('Adaptive Threshold Image', adaptive_thresh_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
85. cv2.Canny
캐니 엣지 검출을 수행하는 함수입니다.
# 캐니 엣지 검출
edges = cv2.Canny(image, 100, 200)
cv2.imshow('Canny Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
86. cv2.Sobel
소벨 엣지 검출을 수행하는 함수입니다.
# 소벨 엣지 검출
sobelx = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=5)
sobely = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=5)
cv2.imshow('Sobel X', sobelx)
cv2.imshow('Sobel Y', sobely)
cv2.waitKey(0)
cv2.destroyAllWindows()
87. cv2.Laplacian
라플라시안 엣지 검출을 수행하는 함수입니다.
# 라플라시안 엣지 검출
laplacian = cv2.Laplacian(image, cv2.CV_64F)
cv2.imshow('Laplacian', laplacian)
cv2.waitKey(0)
cv2.destroyAllWindows()
88. cv2.HoughLines
허프 변환을 사용하여 직선을 검출하는 함수입니다.
# 허프 변환 직선 검출
edges = cv2.Canny(image, 50, 150)
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
for line in lines:
rho, theta = line[0]
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.imshow('Hough Lines', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
89. cv2.HoughLinesP
확률적 허프 변환을 사용하여 직선을 검출하는 함수입니다.
# 확률적 허프 변환 직선 검출
linesP = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=100, minLineLength=100, maxLineGap=10)
for line in linesP:
x1, y1, x2, y2 = line[0]
cv2.line(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imshow('Hough Lines P', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
90. cv2.HoughCircles
허프 변환을 사용하여 원을 검출하는 함수
입니다.
# 허프 변환 원 검출
gray_image = cv2.medianBlur(gray_image, 5)
circles = cv2.HoughCircles(gray_image, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
if circles is not None:
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
cv2.circle(image, (i[0], i[1]), i[2], (0, 255, 0), 2)
cv2.circle(image, (i[0], i[1]), 2, (0, 0, 255), 3)
cv2.imshow('Hough Circles', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
91. cv2.createBackgroundSubtractorMOG2
배경 차이를 사용하여 움직임을 검출하는 함수입니다.
# 배경 차이 사용
fgbg = cv2.createBackgroundSubtractorMOG2()
fgmask = fgbg.apply(image)
cv2.imshow('Foreground Mask', fgmask)
cv2.waitKey(0)
cv2.destroyAllWindows()
92. cv2.findHomography
두 이미지 간의 호모그래피 행렬을 찾는 함수입니다.
# 호모그래피 행렬 찾기
pts_src = np.array([[0, 0], [1, 0], [1, 1], [0, 1]], dtype='float32')
pts_dst = np.array([[0, 0], [2, 0], [2, 2], [0, 2]], dtype='float32')
h, status = cv2.findHomography(pts_src, pts_dst)
print('Homography Matrix:', h)
93. cv2.warpPerspective
호모그래피를 사용하여 이미지를 변환하는 함수입니다.
# 호모그래피 변환
warped_image = cv2.warpPerspective(image, h, (cols, rows))
cv2.imshow('Warp Perspective', warped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
94. cv2.getTrackbarPos
트랙바의 위치를 가져오는 함수입니다.
# 트랙바 위치 가져오기
def nothing(x):
pass
cv2.namedWindow('Trackbar')
cv2.createTrackbar('Value', 'Trackbar', 0, 255, nothing)
while True:
value = cv2.getTrackbarPos('Value', 'Trackbar')
cv2.imshow('Trackbar', np.full((100, 300), value, dtype=np.uint8))
if cv2.waitKey(1) & 0xFF == 27:
break
cv2.destroyAllWindows()
95. cv2.setMouseCallback
마우스 이벤트 콜백을 설정하는 함수입니다.
# 마우스 콜백 설정
def draw_circle(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDBLCLK:
cv2.circle(image, (x, y), 100, (255, 0, 0), -1)
cv2.namedWindow('Mouse Callback')
cv2.setMouseCallback('Mouse Callback', draw_circle)
while True:
cv2.imshow('Mouse Callback', image)
if cv2.waitKey(20) & 0xFF == 27:
break
cv2.destroyAllWindows()
96. cv2.VideoCapture
비디오 캡처 객체를 생성하고 비디오를 읽는 함수입니다.
# 비디오 캡처
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow('Video Capture', frame)
if cv2.waitKey(1) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()
97. cv2.VideoWriter
비디오를 파일에 저장하는 함수입니다.
# 비디오 저장
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
out.write(frame)
cv2.imshow('Video Writing', frame)
if cv2.waitKey(1) & 0xFF == 27:
break
cap.release()
out.release()
cv2.destroyAllWindows()
98. cv2.face.LBPHFaceRecognizer_create
LBPH 얼굴 인식기를 생성하는 함수입니다.
# LBPH 얼굴 인식기 생성
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.train(face_samples, ids)
recognizer.write('trainer.yml')
99. cv2.face.EigenFaceRecognizer_create
Eigen 얼굴 인식기를 생성하는 함수입니다.
# Eigen 얼굴 인식기 생성
recognizer = cv2.face.EigenFaceRecognizer_create()
recognizer.train(face_samples, ids)
recognizer.write('trainer.yml')
100. cv2.face.FisherFaceRecognizer_create
Fisher 얼굴 인식기를 생성하는 함수입니다.
# Fisher 얼굴 인식기 생성
recognizer = cv2.face.FisherFaceRecognizer_create()
recognizer.train(face_samples, ids)
recognizer.write('trainer.yml')
'Software > C' 카테고리의 다른 글
C 시작하기 - 소켓통신 (0) | 2024.08.07 |
---|---|
C 시작하기 - 라이브러리 (0) | 2024.08.06 |
C 시작하기 - OpenCV 함수 3 (0) | 2024.08.06 |
C 시작하기 - OpenCV 함수 2 (0) | 2024.08.06 |
C 시작하기 - OpenCV 함수 1 (0) | 2024.08.06 |