BinocularMarkCam ver 1.1.0

修改了对Mark的识别。mark生产时没有完全按照等间距格式生产。算法中做了特殊处理。
This commit is contained in:
jerryzeng 2025-12-21 10:55:11 +08:00
parent 0747a9ae2e
commit 007ce93dbf
2 changed files with 20 additions and 9 deletions

View File

@ -12,22 +12,22 @@
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <Windows.h>
#define TEST_GROUP 2
#define TEST_GROUP 3
int main(int argc, char** argv)
{
const char* dataPath[TEST_GROUP] = {
"F:/标定采图/charucoMark图/MarkTest/", //0
"F:/标定采图/charucoMark图/Mark_13度/",
};
"F:/ShangGu/项目/冠钦_博清科技/组装/数据/mark测试/" };
SVzNLRange fileIdx[TEST_GROUP] = {
{1,4}, {1,5},
{1,4}, {1,5}, {1,9}
};
const char* ver = wd_charuco3DMarkVersion();
printf("ver:%s\n", ver);
for (int grp = 1; grp < 2; grp++)
for (int grp = 2; grp < 3; grp++)
{
SWD_BQ_CharucoMarkInfo markInfo;
markInfo.patternSize = cv::Size(3, 3);
@ -43,7 +43,7 @@ int main(int argc, char** argv)
// 1. 打开 XML 文件READ 模式)
char calibFile[250];
sprintf_s(calibFile, sizeof(calibFile), "%sStereoCamera.xml", dataPath[grp]);
cv::FileStorage fs("F:/标定采图/charucoMark图/Mark_13度/StereoCamera.xml", cv::FileStorage::READ);
cv::FileStorage fs(calibFile, cv::FileStorage::READ);
// 检查文件是否成功打开
if (!fs.isOpened()) {
@ -68,13 +68,13 @@ int main(int argc, char** argv)
int fidx1 = fileIdx[grp].nMin;
int fidx2 = fileIdx[grp].nMax;
for (int index = fidx1; index < fidx2; index ++)
for (int index = fidx1; index <= fidx2; index ++)
{
char filename[256];
sprintf_s(filename, "%s/left%d.bmp", dataPath[grp], index);
sprintf_s(filename, "%s/left_%d.bmp", dataPath[grp], index);
cv::Mat leftimg = cv::imread(filename, cv::IMREAD_GRAYSCALE);
sprintf_s(filename, "%s/right%d.bmp", dataPath[grp], index);
sprintf_s(filename, "%s/right_%d.bmp", dataPath[grp], index);
cv::Mat rightimg = cv::imread(filename, cv::IMREAD_GRAYSCALE);
if (leftimg.empty() || rightimg.empty())
@ -88,6 +88,12 @@ int main(int argc, char** argv)
markInfo, boardInfo,
disparityOffset,
marks);
printf("%s:\n", filename);
for (int i = 0; i < marks.size(); i++)
{
printf("markID:%d : (%f, %f, %f)\n", marks[i].markID, marks[i].mark3D.x, marks[i].mark3D.y, marks[i].mark3D.z);
}
}
}
}

View File

@ -10,7 +10,8 @@
#define _OUTPUT_DEBUG_DATA 0
//version 1.0.0 : 初始版本
std::string m_strVersion = "1.0.0";
//version 1.1.0 : 修正了9个Mark生产时没有按照固定开始ID的问题
std::string m_strVersion = "1.1.0";
//读版本号
const char* wd_charuco3DMarkVersion(void)
{
@ -58,6 +59,10 @@ void detectCharucoCorners(const cv::Mat& img,
for (int board = 0; board < boardInfo.totalBoardNum; board++)
{
int startId = board * boardInfo.boardIdInterval;
if (startId == 24)
startId = 25;
else if (startId == 8)
startId = 9;
int endId = startId + boardInfo.boardChaucoIDNum - 1;
std::vector<int> ids;