728x90

유용한 함수들을 소개하겠습니다.

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.mergecv2.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')
728x90
반응형

'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

+ Recent posts