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.pyrDowncv2.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.dilatecv2.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.findChessboardCornerscv2.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

+ Recent posts