| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import cv2
- import os
- import sys
- import time
- sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
- from default_config import *
- CHESS_BOARD_DIM = (9, 6)
- criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
- image_dir_path = f"CAMERA_CALIBRATION/images/{set_resolution}"
- os.makedirs(image_dir_path, exist_ok=True)
- def detect_checker_board(image, grayImage, criteria, boardDimension):
- ret, corners = cv2.findChessboardCorners(grayImage, boardDimension)
- if ret:
- corners1 = cv2.cornerSubPix(grayImage, corners, (3, 3), (-1, -1), criteria)
- image = cv2.drawChessboardCorners(image, boardDimension, corners1, ret)
- return image, ret
- cap = cv2.VideoCapture(0)
- # Thay đổi độ phân giải video theo cài đặt ở file default_config.py
- new_height = RESOLUTION_STANDARDS[set_resolution]
- new_width, new_height = change_resolution(cap, new_height)
- print(f'Resolution camera {new_width}x{new_height}')
- n = 0 # image counter
- MAX_IMAGES = 20 # Limit for automatic saving
- while True:
- ret, frame = cap.read()
- if not ret:
- break
- copyFrame = frame.copy()
- gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
- _, board_detected = detect_checker_board(frame, gray, criteria, CHESS_BOARD_DIM)
- if board_detected:
- save_path = f"{image_dir_path}/image{n}.png"
- cv2.imwrite(save_path, copyFrame)
- print(f"[INFO] Saved image {n} at {save_path}")
- n += 1
- if n >= MAX_IMAGES:
- break
- time.sleep(5)
- cap.release()
- print("Total saved images:", n)
|