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.dctcv2.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

+ Recent posts