728x90
유용한 함수들을 소개하겠습니다.
31. cv2.Sobel
Sobel 연산자를 사용하여 이미지의 에지를 검출하는 함수입니다.
# Sobel 연산자 적용
sobelx = cv2.Sobel(gray_image, cv2.CV_64F, 1, 0, ksize=5)
sobely = cv2.Sobel(gray_image, cv2.CV_64F, 0, 1, ksize=5)
cv2.imshow('Sobel X', sobelx)
cv2.imshow('Sobel Y', sobely)
cv2.waitKey(0)
cv2.destroyAllWindows()
32. cv2.Laplacian
라플라시안 연산자를 사용하여 이미지의 에지를 검출하는 함수입니다.
# 라플라시안 연산자 적용
laplacian = cv2.Laplacian(gray_image, cv2.CV_64F)
cv2.imshow('Laplacian', laplacian)
cv2.waitKey(0)
cv2.destroyAllWindows()
33. cv2.scharr
Scharr 연산자를 사용하여 이미지의 에지를 검출하는 함수입니다. Sobel 연산자보다 더 강력한 에지 검출을 제공합니다.
# Scharr 연산자 적용
scharrx = cv2.Scharr(gray_image, cv2.CV_64F, 1, 0)
scharry = cv2.Scharr(gray_image, cv2.CV_64F, 0, 1)
cv2.imshow('Scharr X', scharrx)
cv2.imshow('Scharr Y', scharry)
cv2.waitKey(0)
cv2.destroyAllWindows()
34. cv2.HoughCircles
허프 변환을 사용하여 이미지에서 원을 검출하는 함수입니다.
# 허프 원 변환을 사용한 원 검출
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()
35. cv2.calcBackProject
히스토그램 역투영을 계산하는 함수입니다. 주로 객체 추적에 사용됩니다.
# 히스토그램 역투영
roi_hist = cv2.calcHist([roi], [0], None, [180], [0, 180])
cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)
back_proj = cv2.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)
cv2.imshow('Back Projection', back_proj)
cv2.waitKey(0)
cv2.destroyAllWindows()
36. cv2.matchTemplate
템플릿 매칭을 수행하는 함수입니다. 이미지 내에서 특정 템플릿의 위치를 찾습니다.
# 템플릿 매칭
result = cv2.matchTemplate(gray_image, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
top_left = max_loc
h, w = template.shape
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(image, top_left, bottom_right, (0, 255, 0), 2)
cv2.imshow('Matched Template', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
37. cv2.kmeans
이미지의 색상을 클러스터링하는 함수입니다. 주로 이미지 분할에 사용됩니다.
# K-means 클러스터링
Z = image.reshape((-1, 3))
Z = np.float32(Z)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K = 8
ret, label, center = cv2.kmeans(Z, K, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
center = np.uint8(center)
res = center[label.flatten()]
res2 = res.reshape((image.shape))
cv2.imshow('K-means Clustering', res2)
cv2.waitKey(0)
cv2.destroyAllWindows()
38. cv2.connectedComponents
연결된 컴포넌트를 레이블링하는 함수입니다.
# 연결된 컴포넌트 레이블링
ret, labels = cv2.connectedComponents(binary_image)
label_hue = np.uint8(179 * labels / np.max(labels))
blank_ch = 255 * np.ones_like(label_hue)
labeled_img = cv2.merge([label_hue, blank_ch, blank_ch])
labeled_img = cv2.cvtColor(labeled_img, cv2.COLOR_HSV2BGR)
labeled_img[label_hue == 0] = 0
cv2.imshow('Connected Components', labeled_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
39. cv2.BackgroundSubtractorMOG2
배경을 추출하기 위한 MOG2 알고리즘을 사용하는 함수입니다.
# 배경 추출
fgbg = cv2.createBackgroundSubtractorMOG2()
cap = cv2.VideoCapture('video.mp4')
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
fgmask = fgbg.apply(frame)
cv2.imshow('Foreground Mask', fgmask)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
40. cv2.estimateAffinePartial2D
부분 아핀 변환을 추정하는 함수입니다.
# 부분 아핀 변환 추정
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
pts2 = np.float32([[10, 100], [200, 50], [100, 250]])
M, _ = cv2.estimateAffinePartial2D(pts1, pts2)
dst = cv2.warpAffine(image, M, (cols, rows))
cv2.imshow('Affine Partial Transform', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
41. cv2.watershed
워터쉐드 알고리즘을 사용하여 이미지의 분할 경계를 찾는 함수입니다.
# 워터쉐드 알고리즘
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# 잡음 제거
kernel = np.ones((3, 3), np.uint8)
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)
# 확실한 배경 찾기
sure_bg = cv2.dilate(opening, kernel, iterations=3)
# 확실한 전경 찾기
dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)
ret, sure_fg = cv2.threshold(dist_transform, 0.7 * dist_transform.max(), 255, 0)
# 확실한 전경과 배경의 차이
sure_fg = np.uint8(sure_fg)
unknown = cv2.subtract(sure_bg, sure_fg)
# 마커 라벨링
ret, markers = cv2.connectedComponents(sure_fg)
# 마커에 1을 더함
markers = markers + 1
# 확실하지 않은 영역을 0으로 마커링
markers[unknown == 0] = 0
markers = cv2.watershed(image, markers)
image[markers == -1] = [255, 0, 0]
cv2.imshow('Watershed', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
42. cv2.inRange
이미지에서 특정 색상 범위를 추출하는 함수입니다.
# 특정 색상 범위 추출
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower_blue = np.array([110, 50, 50])
upper_blue = np.array([130, 255, 255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
res = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow('Mask', mask)
cv2.imshow('Result', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
43. cv2.bitwise_and
, `
cv2.bitwise_or,
cv2.bitwise_xor,
cv2.bitwise_not`
비트 연산을 수행하는 함수들입니다.
# 비트 연산 예제
bitwise_and = cv2.bitwise_and(image1, image2)
bitwise_or = cv2.bitwise_or(image1, image2)
bitwise_xor = cv2.bitwise_xor(image1, image2)
bitwise_not = cv2.bitwise_not(image1)
cv2.imshow('Bitwise AND', bitwise_and)
cv2.imshow('Bitwise OR', bitwise_or)
cv2.imshow('Bitwise XOR', bitwise_xor)
cv2.imshow('Bitwise NOT', bitwise_not)
cv2.waitKey(0)
cv2.destroyAllWindows()
44. cv2.dct
및 cv2.idct
이산 코사인 변환(DCT) 및 역이산 코사인 변환(IDCT)을 수행하는 함수입니다.
# 이산 코사인 변환 (DCT)
dct_image = cv2.dct(np.float32(gray_image) / 255.0)
idct_image = cv2.idct(dct_image) * 255.0
cv2.imshow('DCT', dct_image)
cv2.imshow('IDCT', np.uint8(idct_image))
cv2.waitKey(0)
cv2.destroyAllWindows()
45. cv2.moments
이미지의 모멘트를 계산하는 함수입니다.
# 모멘트 계산
moments = cv2.moments(binary_image)
hu_moments = cv2.HuMoments(moments).flatten()
print("Moments:", moments)
print("Hu Moments:", hu_moments)
46. cv2.getRotationMatrix2D
2D 회전 변환 행렬을 생성하는 함수입니다.
# 2D 회전 변환
rows, cols = image.shape[:2]
M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 45, 1)
rotated_image = cv2.warpAffine(image, M, (cols, rows))
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
47. cv2.polylines
폴리라인(여러 개의 연결된 직선)을 그리는 함수입니다.
# 폴리라인 그리기
pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32)
pts = pts.reshape((-1, 1, 2))
cv2.polylines(image, [pts], True, (0, 255, 255))
cv2.imshow('Polylines', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
48. cv2.fillPoly
폴리곤을 채우는 함수입니다.
# 폴리곤 채우기
cv2.fillPoly(image, [pts], (255, 255, 0))
cv2.imshow('Fill Poly', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
49. cv2.putText
이미지에 텍스트를 쓰는 함수입니다.
# 이미지에 텍스트 쓰기
cv2.putText(image, 'OpenCV', (10, 500), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 255), 2, cv2.LINE_AA)
cv2.imshow('Text', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
50. cv2.phaseCorrelate
상호 상관을 사용하여 두 이미지 사이의 변위를 계산하는 함수입니다.
# 상호 상관을 사용한 변위 계산
shift = cv2.phaseCorrelate(np.float32(gray_image1), np.float32(gray_image2))
print("Shift:", shift)
728x90
반응형
'Software > C' 카테고리의 다른 글
C 시작하기 - 라이브러리 (0) | 2024.08.06 |
---|---|
C 시작하기 - OpenCV 함수 4 (0) | 2024.08.06 |
C 시작하기 - OpenCV 함수 2 (0) | 2024.08.06 |
C 시작하기 - OpenCV 함수 1 (0) | 2024.08.06 |
C 시작하기 - OpenCV 활용 (0) | 2024.08.06 |