o2o網(wǎng)站源碼app四川省住房和城鄉(xiāng)建設(shè)廳網(wǎng)站下載
鶴壁市浩天電氣有限公司
2026/01/24 14:14:26
o2o網(wǎng)站源碼app,四川省住房和城鄉(xiāng)建設(shè)廳網(wǎng)站下載,jsp做網(wǎng)站,濟(jì)南專業(yè)網(wǎng)站開(kāi)發(fā)公司前言#xff1a;在計(jì)算機(jī)視覺(jué)領(lǐng)域#xff0c;相機(jī)標(biāo)定是基礎(chǔ)且關(guān)鍵的步驟#xff0c;其目的是獲取相機(jī)的內(nèi)參矩陣和畸變系數(shù)#xff0c;而棋盤格是最常用的標(biāo)定模板。手動(dòng)繪制棋盤格不僅繁瑣#xff0c;還容易出現(xiàn)尺寸不精準(zhǔn)、格子不規(guī)整等問(wèn)題#xff0c;影響標(biāo)定精度。…前言在計(jì)算機(jī)視覺(jué)領(lǐng)域相機(jī)標(biāo)定是基礎(chǔ)且關(guān)鍵的步驟其目的是獲取相機(jī)的內(nèi)參矩陣和畸變系數(shù)而棋盤格是最常用的標(biāo)定模板。手動(dòng)繪制棋盤格不僅繁瑣還容易出現(xiàn)尺寸不精準(zhǔn)、格子不規(guī)整等問(wèn)題影響標(biāo)定精度。本文將分享一個(gè)基于PythonOpenCV的棋盤格標(biāo)定板生成工具支持自定義規(guī)格一鍵生成可直接打印的標(biāo)定板新手也能輕松上手。一、工具核心功能默認(rèn)生成A4尺寸棋盤格支持自定義紙張尺寸需少量修改代碼可自由設(shè)置X/Y方向內(nèi)角點(diǎn)數(shù)量、單個(gè)方格尺寸毫米支持自定義圖片分辨率DPI保證打印清晰度自動(dòng)居中繪制棋盤格添加邊框生成后自動(dòng)輸出詳細(xì)參數(shù)信息支持自定義輸出路徑未指定時(shí)自動(dòng)保存到腳本所在目錄二、環(huán)境準(zhǔn)備本工具依賴兩個(gè)核心Python庫(kù)OpenCV用于圖像處理和numpy用于數(shù)組運(yùn)算安裝命令如下pip install opencv-python numpy安裝完成后可通過(guò)以下代碼驗(yàn)證是否安裝成功import cv2 import numpy as np print(OpenCV版本, cv2.__version__) print(numpy版本, np.__version__)import cv2 import numpy as np print(OpenCV版本, cv2.__version__) print(numpy版本, np.__version__)若未報(bào)錯(cuò)且正常輸出版本號(hào)則環(huán)境配置完成。三、完整代碼展示直接復(fù)制以下代碼保存為create_a4_board.py文件即可使用#!/usr/bin/env python3 import cv2 import numpy as np import os import argparse from pathlib import Path def create_checkerboard(width_mm, height_mm, squares_x, squares_y, square_size_mm, dpi300, output_pathNone): 創(chuàng)建指定尺寸的棋盤格標(biāo)定板 參數(shù): width_mm: 紙張寬度毫米 height_mm: 紙張高度毫米 squares_x: X方向內(nèi)角點(diǎn)數(shù)量 squares_y: Y方向內(nèi)角點(diǎn)數(shù)量 square_size_mm: 每個(gè)方格的大小毫米 dpi: 輸出圖片的分辨率 output_path: 輸出文件路徑默認(rèn)None自動(dòng)生成 # 計(jì)算像素尺寸 width_pixels int(width_mm * dpi / 25.4) height_pixels int(height_mm * dpi / 25.4) square_size_pixels int(square_size_mm * dpi / 25.4) # 計(jì)算棋盤格的實(shí)際像素尺寸 board_width_pixels squares_x * square_size_pixels board_height_pixels squares_y * square_size_pixels # 計(jì)算棋盤格在圖像中的居中位置 offset_x (width_pixels - board_width_pixels) // 2 offset_y (height_pixels - board_height_pixels) // 2 # 創(chuàng)建白色背景 image np.ones((height_pixels, width_pixels), dtypenp.uint8) * 255 # 繪制棋盤格 for i in range(squares_y): for j in range(squares_x): # 棋盤格起始顏色為黑色左上角 if (i j) % 2 0: # 計(jì)算每個(gè)方格的像素位置 x1 offset_x j * square_size_pixels y1 offset_y i * square_size_pixels x2 x1 square_size_pixels y2 y1 square_size_pixels # 確保不超出圖像邊界 x1 max(0, x1) y1 max(0, y1) x2 min(width_pixels, x2) y2 min(height_pixels, y2) # 填充黑色 image[y1:y2, x1:x2] 0 # 添加邊框可選 border_size 1 if border_size 0: image[:border_size, :] 0 image[-border_size:, :] 0 image[:, :border_size] 0 image[:, -border_size:] 0 # 如果未指定輸出路徑自動(dòng)生成 if output_path is None: # 獲取腳本所在目錄 script_dir os.path.dirname(os.path.abspath(__file__)) # 生成文件名 filename fa4_board.jpg output_path os.path.join(script_dir, filename) # 確保輸出目錄存在 os.makedirs(os.path.dirname(output_path), exist_okTrue) # 保存圖像 cv2.imwrite(output_path, image) print(f
棋盤格標(biāo)定板生成完成) print(f規(guī)格: {squares_x}x{squares_y} 內(nèi)角點(diǎn) ({(squares_x1)}x{(squares_y1)} 方格)) print(f方格大小: {square_size_mm} mm) print(f紙張尺寸: {width_mm}x{height_mm} mm (A4)) print(f分辨率: {dpi} DPI) print(f圖像尺寸: {width_pixels}x{height_pixels} 像素) print(f保存路徑: {output_path}) print(f
注意事項(xiàng):) print(f1. 打印時(shí)請(qǐng)確保在打印設(shè)置中選擇實(shí)際大小或100%縮放選項(xiàng)) print(f2. 建議使用高質(zhì)量的打印機(jī)和紙張) print(f3. 打印后使用尺子測(cè)量方格大小進(jìn)行驗(yàn)證) return image, output_path def main(): # 創(chuàng)建參數(shù)解析器 parser argparse.ArgumentParser(description生成A4大小的棋盤格標(biāo)定板) # A4尺寸默認(rèn)值毫米 a4_width_mm 210 a4_height_mm 297 # 添加命令行參數(shù) parser.add_argument(--squares-x, typeint, default6, helpX方向內(nèi)角點(diǎn)數(shù)量默認(rèn)6) parser.add_argument(--squares-y, typeint, default9, helpY方向內(nèi)角點(diǎn)數(shù)量默認(rèn)9) parser.add_argument(--square-size, typeint, default25, help每個(gè)方格的大小毫米默認(rèn)25) parser.add_argument(--dpi, typeint, default300, help輸出圖片的分辨率默認(rèn)300 DPI) parser.add_argument(--output, typestr, defaultNone, help輸出文件路徑默認(rèn)自動(dòng)生成) # 解析參數(shù) args parser.parse_args() # 打印程序信息 print(*60) print( 棋盤格標(biāo)定板生成器 (A4尺寸) ) print(*60) # 創(chuàng)建棋盤格 create_checkerboard( width_mma4_width_mm, height_mma4_height_mm, squares_xargs.squares_x, squares_yargs.squares_y, square_size_mmargs.square_size, dpiargs.dpi, output_pathargs.output ) print(*60) if __name__ __main__: # 檢查是否安裝了OpenCV try: import cv2 except ImportError: print(錯(cuò)誤: 未安裝OpenCV庫(kù)) print(請(qǐng)使用以下命令安裝: pip install opencv-python numpy) exit(1) main()代碼運(yùn)行結(jié)果如下生成了一張棋盤格圖片