TURBO-569:更新工程结构;将导航相机标定和校准功能迁移到XP.Camera类

This commit is contained in:
李伟
2026-04-20 16:09:17 +08:00
parent e166eca3d7
commit 9218384e3f
24 changed files with 2429 additions and 124 deletions
@@ -0,0 +1,104 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 如果重新生成代码,将丢失对此文件所做的更改。
// </auto-generated>
//------------------------------------------------------------------------------
namespace XP.Camera.Calibration.Resources {
using System;
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class CalibrationResources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal CalibrationResources() { }
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("XP.Camera.Calibration.Resources.CalibrationResources", typeof(CalibrationResources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
get { return resourceCulture; }
set { resourceCulture = value; }
}
// 九点标定
public static string CalibrationToolTitle => ResourceManager.GetString("CalibrationToolTitle", resourceCulture) ?? "";
public static string CalibrationLoadImage => ResourceManager.GetString("CalibrationLoadImage", resourceCulture) ?? "";
public static string CalibrationLoadCsv => ResourceManager.GetString("CalibrationLoadCsv", resourceCulture) ?? "";
public static string CalibrationExecute => ResourceManager.GetString("CalibrationExecute", resourceCulture) ?? "";
public static string CalibrationSave => ResourceManager.GetString("CalibrationSave", resourceCulture) ?? "";
public static string CalibrationLoad => ResourceManager.GetString("CalibrationLoad", resourceCulture) ?? "";
public static string CalibrationShowWorld => ResourceManager.GetString("CalibrationShowWorld", resourceCulture) ?? "";
public static string CalibrationPointList => ResourceManager.GetString("CalibrationPointList", resourceCulture) ?? "";
public static string CalibrationPixelX => ResourceManager.GetString("CalibrationPixelX", resourceCulture) ?? "";
public static string CalibrationPixelY => ResourceManager.GetString("CalibrationPixelY", resourceCulture) ?? "";
public static string CalibrationWorldX => ResourceManager.GetString("CalibrationWorldX", resourceCulture) ?? "";
public static string CalibrationWorldY => ResourceManager.GetString("CalibrationWorldY", resourceCulture) ?? "";
public static string CalibrationStatusReady => ResourceManager.GetString("CalibrationStatusReady", resourceCulture) ?? "";
public static string CalibrationStatusImageLoaded => ResourceManager.GetString("CalibrationStatusImageLoaded", resourceCulture) ?? "";
public static string CalibrationStatusCsvLoaded => ResourceManager.GetString("CalibrationStatusCsvLoaded", resourceCulture) ?? "";
public static string CalibrationStatusSuccess => ResourceManager.GetString("CalibrationStatusSuccess", resourceCulture) ?? "";
public static string CalibrationStatusFailed => ResourceManager.GetString("CalibrationStatusFailed", resourceCulture) ?? "";
public static string CalibrationStatusSaved => ResourceManager.GetString("CalibrationStatusSaved", resourceCulture) ?? "";
public static string CalibrationStatusLoaded => ResourceManager.GetString("CalibrationStatusLoaded", resourceCulture) ?? "";
public static string CalibrationCoordinates => ResourceManager.GetString("CalibrationCoordinates", resourceCulture) ?? "";
public static string CalibrationErrorMinPoints => ResourceManager.GetString("CalibrationErrorMinPoints", resourceCulture) ?? "";
public static string CalibrationSuccessTitle => ResourceManager.GetString("CalibrationSuccessTitle", resourceCulture) ?? "";
public static string CalibrationSuccessMessage => ResourceManager.GetString("CalibrationSuccessMessage", resourceCulture) ?? "";
public static string CalibrationSaveSuccess => ResourceManager.GetString("CalibrationSaveSuccess", resourceCulture) ?? "";
public static string CalibrationLoadSuccess => ResourceManager.GetString("CalibrationLoadSuccess", resourceCulture) ?? "";
public static string CalibrationLoadFailed => ResourceManager.GetString("CalibrationLoadFailed", resourceCulture) ?? "";
// 棋盘格标定
public static string ChessboardToolTitle => ResourceManager.GetString("ChessboardToolTitle", resourceCulture) ?? "";
public static string ChessboardAddImages => ResourceManager.GetString("ChessboardAddImages", resourceCulture) ?? "";
public static string ChessboardClearImages => ResourceManager.GetString("ChessboardClearImages", resourceCulture) ?? "";
public static string ChessboardCalibrate => ResourceManager.GetString("ChessboardCalibrate", resourceCulture) ?? "";
public static string ChessboardSave => ResourceManager.GetString("ChessboardSave", resourceCulture) ?? "";
public static string ChessboardLoad => ResourceManager.GetString("ChessboardLoad", resourceCulture) ?? "";
public static string ChessboardUndistort => ResourceManager.GetString("ChessboardUndistort", resourceCulture) ?? "";
public static string ChessboardParameters => ResourceManager.GetString("ChessboardParameters", resourceCulture) ?? "";
public static string ChessboardWidth => ResourceManager.GetString("ChessboardWidth", resourceCulture) ?? "";
public static string ChessboardHeight => ResourceManager.GetString("ChessboardHeight", resourceCulture) ?? "";
public static string ChessboardSquareSize => ResourceManager.GetString("ChessboardSquareSize", resourceCulture) ?? "";
public static string ChessboardImageList => ResourceManager.GetString("ChessboardImageList", resourceCulture) ?? "";
public static string ChessboardStatusInfo => ResourceManager.GetString("ChessboardStatusInfo", resourceCulture) ?? "";
public static string ChessboardStatusReady => ResourceManager.GetString("ChessboardStatusReady", resourceCulture) ?? "";
public static string ChessboardStatusAdded => ResourceManager.GetString("ChessboardStatusAdded", resourceCulture) ?? "";
public static string ChessboardStatusCleared => ResourceManager.GetString("ChessboardStatusCleared", resourceCulture) ?? "";
public static string ChessboardStatusCalibrating => ResourceManager.GetString("ChessboardStatusCalibrating", resourceCulture) ?? "";
public static string ChessboardStatusSuccess => ResourceManager.GetString("ChessboardStatusSuccess", resourceCulture) ?? "";
public static string ChessboardStatusFailed => ResourceManager.GetString("ChessboardStatusFailed", resourceCulture) ?? "";
public static string ChessboardStatusSaved => ResourceManager.GetString("ChessboardStatusSaved", resourceCulture) ?? "";
public static string ChessboardStatusLoaded => ResourceManager.GetString("ChessboardStatusLoaded", resourceCulture) ?? "";
public static string ChessboardStatusUndistorted => ResourceManager.GetString("ChessboardStatusUndistorted", resourceCulture) ?? "";
public static string ChessboardStatusImageError => ResourceManager.GetString("ChessboardStatusImageError", resourceCulture) ?? "";
public static string ChessboardProgressPreparing => ResourceManager.GetString("ChessboardProgressPreparing", resourceCulture) ?? "";
public static string ChessboardProgressDetecting => ResourceManager.GetString("ChessboardProgressDetecting", resourceCulture) ?? "";
public static string ChessboardProgressCalibrating => ResourceManager.GetString("ChessboardProgressCalibrating", resourceCulture) ?? "";
public static string ChessboardProgressCalculating => ResourceManager.GetString("ChessboardProgressCalculating", resourceCulture) ?? "";
public static string ChessboardProgressComplete => ResourceManager.GetString("ChessboardProgressComplete", resourceCulture) ?? "";
public static string ChessboardProgressFailed => ResourceManager.GetString("ChessboardProgressFailed", resourceCulture) ?? "";
public static string ChessboardErrorMinImages => ResourceManager.GetString("ChessboardErrorMinImages", resourceCulture) ?? "";
public static string ChessboardErrorInsufficientValid => ResourceManager.GetString("ChessboardErrorInsufficientValid", resourceCulture) ?? "";
public static string ChessboardSaveSuccess => ResourceManager.GetString("ChessboardSaveSuccess", resourceCulture) ?? "";
public static string ChessboardLoadSuccess => ResourceManager.GetString("ChessboardLoadSuccess", resourceCulture) ?? "";
public static string ChessboardCalibrationComplete => ResourceManager.GetString("ChessboardCalibrationComplete", resourceCulture) ?? "";
public static string ChessboardImageError => ResourceManager.GetString("ChessboardImageError", resourceCulture) ?? "";
}
}
@@ -0,0 +1,259 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<!-- Nine-Point Calibration -->
<data name="CalibrationToolTitle" xml:space="preserve">
<value>Nine-Point Calibration Tool</value>
</data>
<data name="CalibrationLoadImage" xml:space="preserve">
<value>Load Image</value>
</data>
<data name="CalibrationLoadCsv" xml:space="preserve">
<value>Load from CSV</value>
</data>
<data name="CalibrationExecute" xml:space="preserve">
<value>Calibrate</value>
</data>
<data name="CalibrationSave" xml:space="preserve">
<value>Save Calibration</value>
</data>
<data name="CalibrationLoad" xml:space="preserve">
<value>Load Calibration</value>
</data>
<data name="CalibrationShowWorld" xml:space="preserve">
<value>Show World Coordinates</value>
</data>
<data name="CalibrationPointList" xml:space="preserve">
<value>Calibration Points</value>
</data>
<data name="CalibrationPixelX" xml:space="preserve">
<value>Pixel X</value>
</data>
<data name="CalibrationPixelY" xml:space="preserve">
<value>Pixel Y</value>
</data>
<data name="CalibrationWorldX" xml:space="preserve">
<value>World X</value>
</data>
<data name="CalibrationWorldY" xml:space="preserve">
<value>World Y</value>
</data>
<data name="CalibrationStatusReady" xml:space="preserve">
<value>Ready</value>
</data>
<data name="CalibrationStatusImageLoaded" xml:space="preserve">
<value>Status: Image loaded
{0}
Right-click on image to view coordinate conversion</value>
</data>
<data name="CalibrationStatusCsvLoaded" xml:space="preserve">
<value>Status: Loaded {0} calibration points from CSV
{1}</value>
</data>
<data name="CalibrationStatusSuccess" xml:space="preserve">
<value>Status: Calibration successful! Using {0} points</value>
</data>
<data name="CalibrationStatusFailed" xml:space="preserve">
<value>Status: Calibration failed</value>
</data>
<data name="CalibrationStatusSaved" xml:space="preserve">
<value>Status: Calibration saved to
{0}</value>
</data>
<data name="CalibrationStatusLoaded" xml:space="preserve">
<value>Status: Calibration loaded from
{0}</value>
</data>
<data name="CalibrationCoordinates" xml:space="preserve">
<value>Pixel coordinates: ({0:F2}, {1:F2})
World coordinates: ({2:F2}, {3:F2})</value>
</data>
<data name="CalibrationErrorMinPoints" xml:space="preserve">
<value>At least 4 calibration points required!</value>
</data>
<data name="CalibrationSuccessTitle" xml:space="preserve">
<value>Success</value>
</data>
<data name="CalibrationSuccessMessage" xml:space="preserve">
<value>Calibration completed!</value>
</data>
<data name="CalibrationSaveSuccess" xml:space="preserve">
<value>Save successful!</value>
</data>
<data name="CalibrationLoadSuccess" xml:space="preserve">
<value>Load successful!</value>
</data>
<data name="CalibrationLoadFailed" xml:space="preserve">
<value>Load failed!</value>
</data>
<!-- Chessboard Calibration -->
<data name="ChessboardToolTitle" xml:space="preserve">
<value>Chessboard Calibration Tool</value>
</data>
<data name="ChessboardAddImages" xml:space="preserve">
<value>Add Images</value>
</data>
<data name="ChessboardClearImages" xml:space="preserve">
<value>Clear List</value>
</data>
<data name="ChessboardCalibrate" xml:space="preserve">
<value>Calibrate</value>
</data>
<data name="ChessboardSave" xml:space="preserve">
<value>Save Calibration</value>
</data>
<data name="ChessboardLoad" xml:space="preserve">
<value>Load Calibration</value>
</data>
<data name="ChessboardUndistort" xml:space="preserve">
<value>Undistort Image</value>
</data>
<data name="ChessboardParameters" xml:space="preserve">
<value>Chessboard Parameters</value>
</data>
<data name="ChessboardWidth" xml:space="preserve">
<value>Inner Corners Width:</value>
</data>
<data name="ChessboardHeight" xml:space="preserve">
<value>Inner Corners Height:</value>
</data>
<data name="ChessboardSquareSize" xml:space="preserve">
<value>Square Size (mm):</value>
</data>
<data name="ChessboardImageList" xml:space="preserve">
<value>Calibration Images</value>
</data>
<data name="ChessboardStatusInfo" xml:space="preserve">
<value>Status Information</value>
</data>
<data name="ChessboardStatusReady" xml:space="preserve">
<value>Ready</value>
</data>
<data name="ChessboardStatusAdded" xml:space="preserve">
<value>Added {0} images</value>
</data>
<data name="ChessboardStatusCleared" xml:space="preserve">
<value>Image list cleared</value>
</data>
<data name="ChessboardStatusCalibrating" xml:space="preserve">
<value>Calibrating, please wait...</value>
</data>
<data name="ChessboardStatusSuccess" xml:space="preserve">
<value>Calibration successful!
Overall reprojection error: {0:F4} pixels
{1}</value>
</data>
<data name="ChessboardStatusFailed" xml:space="preserve">
<value>Calibration failed: {0}</value>
</data>
<data name="ChessboardStatusSaved" xml:space="preserve">
<value>Calibration saved:
{0}</value>
</data>
<data name="ChessboardStatusLoaded" xml:space="preserve">
<value>Calibration loaded:
{0}</value>
</data>
<data name="ChessboardStatusUndistorted" xml:space="preserve">
<value>Image undistorted:
{0}</value>
</data>
<data name="ChessboardStatusImageError" xml:space="preserve">
<value>Image {0}
Reprojection error: {1:F4} pixels</value>
</data>
<data name="ChessboardProgressPreparing" xml:space="preserve">
<value>Preparing calibration...</value>
</data>
<data name="ChessboardProgressDetecting" xml:space="preserve">
<value>Detecting corners ({0}/{1})</value>
</data>
<data name="ChessboardProgressCalibrating" xml:space="preserve">
<value>Performing camera calibration...</value>
</data>
<data name="ChessboardProgressCalculating" xml:space="preserve">
<value>Calculating reprojection errors ({0}/{1})</value>
</data>
<data name="ChessboardProgressComplete" xml:space="preserve">
<value>Calibration complete</value>
</data>
<data name="ChessboardProgressFailed" xml:space="preserve">
<value>Calibration failed</value>
</data>
<data name="ChessboardErrorMinImages" xml:space="preserve">
<value>At least 3 images required!</value>
</data>
<data name="ChessboardErrorInsufficientValid" xml:space="preserve">
<value>Insufficient valid images, need at least 3, current {0}</value>
</data>
<data name="ChessboardSaveSuccess" xml:space="preserve">
<value>Save successful!</value>
</data>
<data name="ChessboardLoadSuccess" xml:space="preserve">
<value>Load successful!</value>
</data>
<data name="ChessboardCalibrationComplete" xml:space="preserve">
<value>Calibration completed!</value>
</data>
<data name="ChessboardImageError" xml:space="preserve">
<value>Image{0}: {1:F4} pixels</value>
</data>
</root>
@@ -0,0 +1,259 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<!-- 九点标定 -->
<data name="CalibrationToolTitle" xml:space="preserve">
<value>九点标定工具</value>
</data>
<data name="CalibrationLoadImage" xml:space="preserve">
<value>加载图像</value>
</data>
<data name="CalibrationLoadCsv" xml:space="preserve">
<value>从CSV加载</value>
</data>
<data name="CalibrationExecute" xml:space="preserve">
<value>执行标定</value>
</data>
<data name="CalibrationSave" xml:space="preserve">
<value>保存标定</value>
</data>
<data name="CalibrationLoad" xml:space="preserve">
<value>加载标定</value>
</data>
<data name="CalibrationShowWorld" xml:space="preserve">
<value>显示世界坐标</value>
</data>
<data name="CalibrationPointList" xml:space="preserve">
<value>标定点列表</value>
</data>
<data name="CalibrationPixelX" xml:space="preserve">
<value>像素X</value>
</data>
<data name="CalibrationPixelY" xml:space="preserve">
<value>像素Y</value>
</data>
<data name="CalibrationWorldX" xml:space="preserve">
<value>世界X</value>
</data>
<data name="CalibrationWorldY" xml:space="preserve">
<value>世界Y</value>
</data>
<data name="CalibrationStatusReady" xml:space="preserve">
<value>就绪</value>
</data>
<data name="CalibrationStatusImageLoaded" xml:space="preserve">
<value>状态:图像已加载
{0}
右键点击图像查看坐标转换</value>
</data>
<data name="CalibrationStatusCsvLoaded" xml:space="preserve">
<value>状态:已从CSV加载 {0} 个标定点
{1}</value>
</data>
<data name="CalibrationStatusSuccess" xml:space="preserve">
<value>状态:标定成功!使用 {0} 个点</value>
</data>
<data name="CalibrationStatusFailed" xml:space="preserve">
<value>状态:标定失败</value>
</data>
<data name="CalibrationStatusSaved" xml:space="preserve">
<value>状态:标定文件已保存到
{0}</value>
</data>
<data name="CalibrationStatusLoaded" xml:space="preserve">
<value>状态:标定文件已加载
{0}</value>
</data>
<data name="CalibrationCoordinates" xml:space="preserve">
<value>像素坐标: ({0:F2}, {1:F2})
世界坐标: ({2:F2}, {3:F2})</value>
</data>
<data name="CalibrationErrorMinPoints" xml:space="preserve">
<value>至少需要4个标定点!</value>
</data>
<data name="CalibrationSuccessTitle" xml:space="preserve">
<value>成功</value>
</data>
<data name="CalibrationSuccessMessage" xml:space="preserve">
<value>标定完成!</value>
</data>
<data name="CalibrationSaveSuccess" xml:space="preserve">
<value>保存成功!</value>
</data>
<data name="CalibrationLoadSuccess" xml:space="preserve">
<value>加载成功!</value>
</data>
<data name="CalibrationLoadFailed" xml:space="preserve">
<value>加载失败!</value>
</data>
<!-- 棋盘格标定 -->
<data name="ChessboardToolTitle" xml:space="preserve">
<value>棋盘格畸变校正工具</value>
</data>
<data name="ChessboardAddImages" xml:space="preserve">
<value>添加图像</value>
</data>
<data name="ChessboardClearImages" xml:space="preserve">
<value>清空列表</value>
</data>
<data name="ChessboardCalibrate" xml:space="preserve">
<value>执行标定</value>
</data>
<data name="ChessboardSave" xml:space="preserve">
<value>保存标定</value>
</data>
<data name="ChessboardLoad" xml:space="preserve">
<value>加载标定</value>
</data>
<data name="ChessboardUndistort" xml:space="preserve">
<value>校正图像</value>
</data>
<data name="ChessboardParameters" xml:space="preserve">
<value>棋盘格参数</value>
</data>
<data name="ChessboardWidth" xml:space="preserve">
<value>内角点宽度:</value>
</data>
<data name="ChessboardHeight" xml:space="preserve">
<value>内角点高度:</value>
</data>
<data name="ChessboardSquareSize" xml:space="preserve">
<value>方格尺寸(mm):</value>
</data>
<data name="ChessboardImageList" xml:space="preserve">
<value>标定图像列表</value>
</data>
<data name="ChessboardStatusInfo" xml:space="preserve">
<value>状态信息</value>
</data>
<data name="ChessboardStatusReady" xml:space="preserve">
<value>就绪</value>
</data>
<data name="ChessboardStatusAdded" xml:space="preserve">
<value>已添加 {0} 张图像</value>
</data>
<data name="ChessboardStatusCleared" xml:space="preserve">
<value>已清空图像列表</value>
</data>
<data name="ChessboardStatusCalibrating" xml:space="preserve">
<value>正在标定,请稍候...</value>
</data>
<data name="ChessboardStatusSuccess" xml:space="preserve">
<value>标定成功!
总体重投影误差: {0:F4} 像素
{1}</value>
</data>
<data name="ChessboardStatusFailed" xml:space="preserve">
<value>标定失败: {0}</value>
</data>
<data name="ChessboardStatusSaved" xml:space="preserve">
<value>标定已保存:
{0}</value>
</data>
<data name="ChessboardStatusLoaded" xml:space="preserve">
<value>标定已加载:
{0}</value>
</data>
<data name="ChessboardStatusUndistorted" xml:space="preserve">
<value>已校正图像:
{0}</value>
</data>
<data name="ChessboardStatusImageError" xml:space="preserve">
<value>图像 {0}
重投影误差: {1:F4} 像素</value>
</data>
<data name="ChessboardProgressPreparing" xml:space="preserve">
<value>准备标定...</value>
</data>
<data name="ChessboardProgressDetecting" xml:space="preserve">
<value>检测角点 ({0}/{1})</value>
</data>
<data name="ChessboardProgressCalibrating" xml:space="preserve">
<value>执行相机标定...</value>
</data>
<data name="ChessboardProgressCalculating" xml:space="preserve">
<value>计算重投影误差 ({0}/{1})</value>
</data>
<data name="ChessboardProgressComplete" xml:space="preserve">
<value>标定完成</value>
</data>
<data name="ChessboardProgressFailed" xml:space="preserve">
<value>标定失败</value>
</data>
<data name="ChessboardErrorMinImages" xml:space="preserve">
<value>至少需要3张图像!</value>
</data>
<data name="ChessboardErrorInsufficientValid" xml:space="preserve">
<value>有效图像不足,需要至少3张,当前{0}张</value>
</data>
<data name="ChessboardSaveSuccess" xml:space="preserve">
<value>保存成功!</value>
</data>
<data name="ChessboardLoadSuccess" xml:space="preserve">
<value>加载成功!</value>
</data>
<data name="ChessboardCalibrationComplete" xml:space="preserve">
<value>标定完成!</value>
</data>
<data name="ChessboardImageError" xml:space="preserve">
<value>图像{0}: {1:F4} 像素</value>
</data>
</root>