BinocularMarkCam ver 1.1.0
修改了对Mark的识别。mark生产时没有完全按照等间距格式生产。算法中做了特殊处理。
This commit is contained in:
parent
0747a9ae2e
commit
007ce93dbf
@ -12,22 +12,22 @@
|
|||||||
#include <opencv2/imgcodecs/imgcodecs.hpp>
|
#include <opencv2/imgcodecs/imgcodecs.hpp>
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
|
||||||
#define TEST_GROUP 2
|
#define TEST_GROUP 3
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
const char* dataPath[TEST_GROUP] = {
|
const char* dataPath[TEST_GROUP] = {
|
||||||
"F:/标定采图/charucoMark图/MarkTest/", //0
|
"F:/标定采图/charucoMark图/MarkTest/", //0
|
||||||
"F:/标定采图/charucoMark图/Mark_13度/",
|
"F:/标定采图/charucoMark图/Mark_13度/",
|
||||||
};
|
"F:/ShangGu/项目/冠钦_博清科技/组装/数据/mark测试/" };
|
||||||
|
|
||||||
SVzNLRange fileIdx[TEST_GROUP] = {
|
SVzNLRange fileIdx[TEST_GROUP] = {
|
||||||
{1,4}, {1,5},
|
{1,4}, {1,5}, {1,9}
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* ver = wd_charuco3DMarkVersion();
|
const char* ver = wd_charuco3DMarkVersion();
|
||||||
printf("ver:%s\n", ver);
|
printf("ver:%s\n", ver);
|
||||||
|
|
||||||
for (int grp = 1; grp < 2; grp++)
|
for (int grp = 2; grp < 3; grp++)
|
||||||
{
|
{
|
||||||
SWD_BQ_CharucoMarkInfo markInfo;
|
SWD_BQ_CharucoMarkInfo markInfo;
|
||||||
markInfo.patternSize = cv::Size(3, 3);
|
markInfo.patternSize = cv::Size(3, 3);
|
||||||
@ -43,7 +43,7 @@ int main(int argc, char** argv)
|
|||||||
// 1. 打开 XML 文件(READ 模式)
|
// 1. 打开 XML 文件(READ 模式)
|
||||||
char calibFile[250];
|
char calibFile[250];
|
||||||
sprintf_s(calibFile, sizeof(calibFile), "%sStereoCamera.xml", dataPath[grp]);
|
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()) {
|
if (!fs.isOpened()) {
|
||||||
@ -68,13 +68,13 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
int fidx1 = fileIdx[grp].nMin;
|
int fidx1 = fileIdx[grp].nMin;
|
||||||
int fidx2 = fileIdx[grp].nMax;
|
int fidx2 = fileIdx[grp].nMax;
|
||||||
for (int index = fidx1; index < fidx2; index ++)
|
for (int index = fidx1; index <= fidx2; index ++)
|
||||||
{
|
{
|
||||||
char filename[256];
|
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);
|
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);
|
cv::Mat rightimg = cv::imread(filename, cv::IMREAD_GRAYSCALE);
|
||||||
|
|
||||||
if (leftimg.empty() || rightimg.empty())
|
if (leftimg.empty() || rightimg.empty())
|
||||||
@ -88,6 +88,12 @@ int main(int argc, char** argv)
|
|||||||
markInfo, boardInfo,
|
markInfo, boardInfo,
|
||||||
disparityOffset,
|
disparityOffset,
|
||||||
marks);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,8 @@
|
|||||||
#define _OUTPUT_DEBUG_DATA 0
|
#define _OUTPUT_DEBUG_DATA 0
|
||||||
|
|
||||||
//version 1.0.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)
|
const char* wd_charuco3DMarkVersion(void)
|
||||||
{
|
{
|
||||||
@ -58,6 +59,10 @@ void detectCharucoCorners(const cv::Mat& img,
|
|||||||
for (int board = 0; board < boardInfo.totalBoardNum; board++)
|
for (int board = 0; board < boardInfo.totalBoardNum; board++)
|
||||||
{
|
{
|
||||||
int startId = board * boardInfo.boardIdInterval;
|
int startId = board * boardInfo.boardIdInterval;
|
||||||
|
if (startId == 24)
|
||||||
|
startId = 25;
|
||||||
|
else if (startId == 8)
|
||||||
|
startId = 9;
|
||||||
int endId = startId + boardInfo.boardChaucoIDNum - 1;
|
int endId = startId + boardInfo.boardChaucoIDNum - 1;
|
||||||
|
|
||||||
std::vector<int> ids;
|
std::vector<int> ids;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user