728x90
추가적인 유용한 OpenCV 함수를 소개하고, 간단한 예제와 함께 설명하겠습니다.
16. cv2.equalizeHist
이미지의 히스토그램을 균일화하는 함수입니다.
# 그레이스케일 이미지의 히스토그램 균일화
equalized_image = cv2.equalizeHist(gray_image)
cv2.imshow('Equalized Image', equalized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
17. cv2.adaptiveThreshold
적응형 이진화를 적용하는 함수입니다.
# 적응형 이진화
adaptive_thresh = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
cv2.imshow('Adaptive Threshold', adaptive_thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
18. cv2.medianBlur
미디언 블러를 적용하여 노이즈를 제거하는 함수입니다.
# 미디언 블러 적용
median_blurred = cv2.medianBlur(image, 5)
cv2.imshow('Median Blurred Image', median_blurred)
cv2.waitKey(0)
cv2.destroyAllWindows()
19. cv2.bilateralFilter
바이레터럴 필터를 적용하여 엣지를 유지하면서 노이즈를 제거하는 함수입니다.
# 바이레터럴 필터 적용
bilateral_filtered = cv2.bilateralFilter(image, 9, 75, 75)
cv2.imshow('Bilateral Filtered Image', bilateral_filtered)
cv2.waitKey(0)
cv2.destroyAllWindows()
20. cv2.pyrDown
및 cv2.pyrUp
이미지 피라미드를 이용해 이미지를 축소(pyrDown
) 및 확대(pyrUp
)하는 함수입니다.
# 이미지 축소
pyr_down = cv2.pyrDown(image)
cv2.imshow('PyrDown Image', pyr_down)
cv2.waitKey(0)
# 이미지 확대
pyr_up = cv2.pyrUp(pyr_down)
cv2.imshow('PyrUp Image', pyr_up)
cv2.waitKey(0)
cv2.destroyAllWindows()
21. cv2.calcHist
이미지의 히스토그램을 계산하는 함수입니다.
# 그레이스케일 이미지의 히스토그램 계산
hist = cv2.calcHist([gray_image], [0], None, [256], [0, 256])
plt.plot(hist)
plt.show()
22. cv2.cornerHarris
Harris 코너 검출기를 사용하는 함수입니다.
# Harris 코너 검출
gray = np.float32(gray_image)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
image[dst > 0.01 * dst.max()] = [0, 0, 255]
cv2.imshow('Harris Corners', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
23. cv2.cornerSubPix
코너 위치를 더 정확하게 조정하는 함수입니다.
# 코너 검출을 더 정밀하게 조정
corners = cv2.goodFeaturesToTrack(gray_image, 25, 0.01, 10)
corners = np.int0(corners)
for i in corners:
x, y = i.ravel()
cv2.circle(image, (x, y), 3, 255, -1)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
corners = cv2.cornerSubPix(gray_image, np.float32(corners), (5, 5), (-1, -1), criteria)
for i in corners:
x, y = i.ravel()
cv2.circle(image, (x, y), 3, 255, -1)
cv2.imshow('Subpixel Corners', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
24. cv2.remap
이미지의 픽셀 위치를 재매핑하는 함수입니다.
# 재매핑 예제
rows, cols = image.shape[:2]
map_x = np.zeros((rows, cols), dtype=np.float32)
map_y = np.zeros((rows, cols), dtype=np.float32)
for i in range(rows):
for j in range(cols):
map_x.itemset((i, j), j)
map_y.itemset((i, j), rows - i)
remapped_image = cv2.remap(image, map_x, map_y, cv2.INTER_LINEAR)
cv2.imshow('Remapped Image', remapped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
25. cv2.floodFill
이미지에서 특정 영역을 채우는 함수입니다.
# 플러드 필 예제
h, w = image.shape[:2]
mask = np.zeros((h + 2, w + 2), np.uint8)
cv2.floodFill(image, mask, (0, 0), (255, 0, 0))
cv2.imshow('Flood Filled Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
26. cv2.warpAffine
이미지를 아핀 변환하는 함수입니다.
# 아핀 변환
rows, cols, ch = image.shape
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()
27. cv2.warpPerspective
이미지를 원근 변환하는 함수입니다.
# 원근 변환
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()
28. cv2.dilate
및 cv2.erode
이미지의 형태를 변화시키는 함수들입니다.
# 팽창과 침식
kernel = np.ones((5, 5), np.uint8)
# 팽창
dilated = cv2.dilate(image, kernel, iterations = 1)
cv2.imshow('Dilated Image', dilated)
cv2.waitKey(0)
# 침식
eroded = cv2.erode(image, kernel, iterations = 1)
cv2.imshow('Eroded Image', eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()
29. cv2.morphologyEx
고급 형태학적 변환을 적용하는 함수입니다.
# 모폴로지 변환
kernel = np.ones((5, 5), np.uint8)
# 열기 (침식 후 팽창)
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
cv2.imshow('Opening', opening)
cv2.waitKey(0)
# 닫기 (팽창 후 침식)
closing = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
cv2.imshow('Closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()
30. cv2.findChessboardCorners
및 cv2.drawChessboardCorners
체스보드 패턴을 찾고 그리는 함수입니다. 주로 카메라 캘리브레이션에 사용됩니다.
# 체스보드 코너 검출
chessboard_size = (9, 6)
ret, corners = cv2.findChessboardCorners(gray_image, chessboard_size, None)
if ret:
cv2.drawChessboardCorners(image, chessboard_size, corners, ret)
cv2.imshow('Chessboard Corners', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
728x90
반응형
'Software > C' 카테고리의 다른 글
C 시작하기 - OpenCV 함수 4 (0) | 2024.08.06 |
---|---|
C 시작하기 - OpenCV 함수 3 (0) | 2024.08.06 |
C 시작하기 - OpenCV 함수 1 (0) | 2024.08.06 |
C 시작하기 - OpenCV 활용 (0) | 2024.08.06 |
C 시작하기 - OpenCV 소개 (0) | 2024.08.06 |