cv.findChessboardCorners()
cv.findChessboardCorners() 함수는 OpenCV 라이브러리에서 제공하는 함수
chessboard 패턴의 코너를 찾는 데 사용됨.
- 이 함수는 camera calibration 과정에서 자주 사용됨.
- 입력 이미지에서 chessboard의 코너를 정확하게 찾아냄.
cv.cornerSubPix와 자주 같이 사용됨.
https://dsaint31.tistory.com/733
[OpenCV] cornerSubPix : 코너 검출 정확도 향상
OpenCV 라이브러리에서 제공하는 cornerSubPix는코너 검출의 정확도를 높이기 위해 사용되는 함수임.이 함수는 초기 검출된 코너 위치를 서브픽셀 수준으로 정밀하게 조정하기 위해 사용됨.함수 설
dsaint31.tistory.com
Function Signature
retval, corners = cv.findChessboardCorners(
image,
patternSize,
flags=None
)
Parameters
- image:
- chessboard corner를 찾을 gray-scale 이미지 (Grayscale만 가능함).
- 보통
cv.cvtColor()함수에서cv.COLOR_BGR2GRAY사용하여 컬러 이미지를 그레이스케일로 변환.
- patternSize:
- chessboard의 각 치수,
- corner는 chessboard에서 검은색 square가 만난 점 들의 grid의 dimension을 가리킴.
- 즉 corner의 수를 (가로, 세로) 튜플로 표현:
(# of cols, # of rows) - 예를 들어,
patternSize = (7,6)은 chessboard 가로 방향으로 7개, 세로 방향으로 6개의 코너를 가지고 있음 - 실제 chessboard에서는 이 보다 가로 및 세로에 각각 1씩 더 많은 선을 가지고 있음.
- chessboard의 각 치수,
- flags:
- 이 parameter는 함수가 corner를 찾는 방식을 조정하는 데 사용됨.
- 기본값은
None.- 예를 들어
cv.CALIB_CB_ADAPTIVE_THRESH또는cv.CALIB_CB_FAST_CHECK등의 플래그를 사용할 수 있음.
- 예를 들어
return value (turple)
- retval:
- 코너 탐지의 성공 여부를 나타내는 boolean value.
True면 코너를 성공적으로 찾았고,False면 실패했음을 의미.
- corners:
- 탐지된 corners의 위치를 나타내는
list. (x, y)좌표를 가진 points의 리스트- Numpy 배열 형태로 반환.
- 탐지된 corners의 위치를 나타내는
cv.drawChessboardCorners
cv.drawChessboardCorners() 함수는 OpenCV 라이브러리에서 제공하는 기능
검출된 corners of chessboard를 이미지에 시각적으로 표시하는 데 사용
Function Signature
cv.drawChessboardCorners(
image,
patternSize,
corners,
patternWasFound)
- image:
- corner를 그릴 이미지.
- 일반적으로 컬러 이미지를 권장.
- patternSize:
- chessboard에서 corner point들의 dimensions
- corner는 chessboard에서 검은색 square가 만난 점을 가리킴.
- 즉 corner의 수를 (가로, 세로) tuple로 표현:
(# of cols, # of rows) - 예를 들어,
patternSize = (7,6)은 chessboard 가로 방향으로 7개, 세로 방향으로 6개의 코너를 가지고 있음 - 실제 chessboard에서는 이 보다 가로 및 세로에 각각 1씩 더 많은 선을 가지고 있음.
- chessboard에서 corner point들의 dimensions
- corners:
- 검출된 corner의 위치가 포함된 배열.
- 이는 cv2.findChessboardCorners() 함수에 의해 반환된 객체를 사용.
- 배열은 실수형 좌표를 포함하고 있으며, (x, y) 형태로 각 corner의 위치를 나타냄.
- patternWasFound:
- corner가 성공적으로 검출되었는지를 나타내는 boolean value.
- 이 값이 True 일 때만 corner를 이미지에 그림.
사용 예
import numpy as np
import cv2 as cv
def create_chessboard(corners_cols, corners_rows, tile_size=50):
"""
chessboard 이미지를 생성하는 함수입니다.
:param corners_cols: 체스보드의 열 방향 코너 수
:param corners_rows: 체스보드의 행 방향 코너 수
:param tile_size: 각 타일(셀)의 크기 (픽셀 단위)
:return: 생성된 체스보드 이미지 (NumPy 배열)
"""
# 실제 칸 수는 코너 수보다 한 개 더 많음
cols = corners_cols + 1
rows = corners_rows + 1
# 체스보드 총 크기 계산
board_width = cols * tile_size
board_height = rows * tile_size
# 체스보드 이미지 생성
chessboard = np.zeros((board_height, board_width), dtype=np.uint8)
# 흰색(255)과 검은색(0) 타일 생성
for row in range(rows):
for col in range(cols):
if (row + col) % 2:
chessboard[row*tile_size:(row+1)*tile_size,
col*tile_size:(col+1)*tile_size] = 255 # 흰색 셀
return chessboard
# 함수 사용 예
corners_cols = 9 # 열 방향 코너 수
corners_rows = 5 # 행 방향 코너 수
tile_size = 50 # 각 타일의 크기는 50x50 픽셀
# 체스보드 생성
chessboard_image = create_chessboard(corners_cols, corners_rows, tile_size)
# 생성된 체스보드 이미지 보여주기
cv.imshow('Generated Chessboard', chessboard_image)
ret, corners = cv.findChessboardCorners(chessboard_image, (corners_cols,corners_rows), None)
if ret:
img = chessboard_image.copy()
img = cv.cvtColor(img, cv.COLOR_GRAY2BGR)
cv.drawChessboardCorners(img, (corners_cols, corners_rows), corners, ret)
cv.imshow('Detected Corners', img)
cv.waitKey(0)
cv.destroyAllWindows()
결과는 다음과 같음.

같이 보면 좋은 자료들
2024.09.22 - [Python] - [CV] cv2.calibrateCamera
[CV] cv2.calibrateCamera
cv2.calibrateCamerahttps://docs.opencv.org/4.x/d9/d0c/group__calib3d.html#ga3207604e4b1a1758aa66acb6ed5aa65d OpenCV: Camera Calibration and 3D ReconstructionThe functions in this section use a so-called pinhole camera model. The view of a scene is obtained
ds31x.tistory.com
2025.07.04 - [Python] - cv.getOptimalNewCameraMatrix()
cv.getOptimalNewCameraMatrix()
관련 공식 문서OpenCV 공식 튜토리얼:https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html OpenCV: Camera CalibrationGoal In this section, we will learn about types of distortion caused by cameras how to find the intrinsic and extrinsic
ds31x.tistory.com
2025.07.04 - [Python] - cv.undistort()와 cv.initUndistortRectifyMap() + cv.remap()
cv.undistort()와 cv.initUndistortRectifyMap() + cv.remap()
OpenCV는cv.calibrateCamera() 를 통해 얻은camera matrix와 distortion coefficients를 이용하여undistorted image를 생성하는 방법으로다음 2가지를 지원함:cv.undistort()cv.initUndistortRectifyMap() + cv.remap()관련 gist URLhttps://g
ds31x.tistory.com
https://gist.github.com/dsaint31x/5c5dfe8e2a57bd6ffe8560d6a2f3b86b
dip_camera_calibration.ipynb
dip_camera_calibration.ipynb. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
'Python' 카테고리의 다른 글
| [Py] sys.exit() (1) | 2024.09.11 |
|---|---|
| [Py] Namespace Package (0) | 2024.09.11 |
| [NumPy] ravel() 메서드 with flatten() 메서드 (0) | 2024.09.09 |
| [NumPy] 생성 및 초기화, 기본 조작 (1) (0) | 2024.09.09 |
| [Py] Python에서 string formatting. (0) | 2024.09.04 |