camCalib/camCalib
version 1.1.0 : 修正了单目相机标定时生成激光面方程的bug
This commit is contained in:
parent
1127ec7b25
commit
91863b5fc6
@ -113,7 +113,8 @@ void SvPickRgnRslt(
|
|||||||
char * BmpDstFileName
|
char * BmpDstFileName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
char *TXTData = (char *)malloc(256);
|
//char *TXTData = (char *)malloc(256);
|
||||||
|
char TXTData[256];
|
||||||
memset(TXTData,0,256);
|
memset(TXTData,0,256);
|
||||||
|
|
||||||
std::ofstream TXTFile(TxtDstFileName);
|
std::ofstream TXTFile(TxtDstFileName);
|
||||||
@ -207,7 +208,7 @@ void SvPickRgnRslt(
|
|||||||
}
|
}
|
||||||
|
|
||||||
TXTFile.close();
|
TXTFile.close();
|
||||||
free(TXTData);
|
//free(TXTData);
|
||||||
|
|
||||||
unsigned char *DstR = (unsigned char *)malloc(FrmH*FrmW);
|
unsigned char *DstR = (unsigned char *)malloc(FrmH*FrmW);
|
||||||
unsigned char *DstG = (unsigned char *)malloc(FrmH*FrmW);
|
unsigned char *DstG = (unsigned char *)malloc(FrmH*FrmW);
|
||||||
|
|||||||
@ -101,8 +101,10 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
ProcObjInst[Grp_idx].SrcFileDir = (char*)malloc(FILENAME_LEN);
|
ProcObjInst[Grp_idx].SrcFileDir = (char*)malloc(FILENAME_LEN);
|
||||||
ProcObjInst[Grp_idx].DstFileDir = (char*)malloc(FILENAME_LEN);
|
ProcObjInst[Grp_idx].DstFileDir = (char*)malloc(FILENAME_LEN);
|
||||||
sprintf(ProcObjInst[Grp_idx].SrcFileDir, "D:/LicgWork/ToExt/PickLazerWin/TstSrc/Grp_0/");
|
//sprintf(ProcObjInst[Grp_idx].SrcFileDir, "D:/LicgWork/ToExt/PickLazerWin/TstSrc/Grp_0/");
|
||||||
sprintf(ProcObjInst[Grp_idx].DstFileDir, "D:/LicgWork/ToExt/PickLazerWin/SimRslt/Grp_0/");
|
//sprintf(ProcObjInst[Grp_idx].DstFileDir, "D:/LicgWork/ToExt/PickLazerWin/SimRslt/Grp_0/");
|
||||||
|
sprintf(ProcObjInst[Grp_idx].SrcFileDir, "F:/Licg/CModelPrj/SimCaseSet/TstSrc/Grp_0/");
|
||||||
|
sprintf(ProcObjInst[Grp_idx].DstFileDir, "F:/Licg/CModelPrj/SimCaseSet/SimRslt/Grp_0/");
|
||||||
|
|
||||||
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|||||||
@ -124,7 +124,7 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>F:\ShangGu\ProductDev\AlgoDev\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;.\sourceCode\CG_frontEnd\lib\debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>..\build\x64\Debug;.\sourceCode\CG_frontEnd\lib\debug;D:\zeng\AlgoDev\thirdParty\opencv320\build\include;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>opencv_world480d.lib;camAlgoSW.lib;ImgAccd.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>opencv_world480d.lib;camAlgoSW.lib;ImgAccd.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -143,7 +143,7 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>F:\ShangGu\ProductDev\AlgoDev\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Release;F:\ShangGu\ProductDev\三角光相机\相机开发\camAlgo_git\camAlgoSW\sourceCode\CG_frontEnd\lib\debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>..\build\x64\Release;F:\ShangGu\ProductDev\三角光相机\相机开发\camAlgo_git\camAlgoSW\sourceCode\CG_frontEnd\lib\debug;D:\zeng\AlgoDev\thirdParty\opencv320\build\include;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>opencv_world480.lib;camAlgoSW.lib;ImgAccd.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>opencv_world480.lib;camAlgoSW.lib;ImgAccd.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
|||||||
@ -11,7 +11,8 @@
|
|||||||
#define _DO_CAMERA_CALIB 1
|
#define _DO_CAMERA_CALIB 1
|
||||||
|
|
||||||
//version 1.0.0 : base version released
|
//version 1.0.0 : base version released
|
||||||
std::string m_strVersion = "camCalib 1.0.0";
|
//version 1.1.0 : 修正了单目相机标定时生成激光面方程的bug
|
||||||
|
std::string m_strVersion = "camCalib 1.1.0";
|
||||||
const char* wd_camCalibVersion(void)
|
const char* wd_camCalibVersion(void)
|
||||||
{
|
{
|
||||||
return m_strVersion.c_str();
|
return m_strVersion.c_str();
|
||||||
@ -58,6 +59,7 @@ void sg_outputCalibKD(const char* fileName, cv::Mat& K, cv::Mat& D, cv::Vec4f& p
|
|||||||
sprintf_s(dataStr, 250, "%g, %g, %g, %g, %g", temp[0], temp[1], temp[2], temp[3], temp[4]);
|
sprintf_s(dataStr, 250, "%g, %g, %g, %g, %g", temp[0], temp[1], temp[2], temp[3], temp[4]);
|
||||||
sw << dataStr << std::endl;
|
sw << dataStr << std::endl;
|
||||||
|
|
||||||
|
#if 0
|
||||||
//ax+by+cz+d = 0
|
//ax+by+cz+d = 0
|
||||||
float a = (float)pe[0];
|
float a = (float)pe[0];
|
||||||
float b = (float)pe[1];
|
float b = (float)pe[1];
|
||||||
@ -69,6 +71,14 @@ void sg_outputCalibKD(const char* fileName, cv::Mat& K, cv::Mat& D, cv::Vec4f& p
|
|||||||
d = -d / c;
|
d = -d / c;
|
||||||
c = -1;
|
c = -1;
|
||||||
sprintf_s(dataStr, 250, "%g, %g, %g", a, b, d);
|
sprintf_s(dataStr, 250, "%g, %g, %g", a, b, d);
|
||||||
|
#else
|
||||||
|
// 1/z = ax+by+c
|
||||||
|
float a = (float)pe[0];
|
||||||
|
float b = (float)pe[1];
|
||||||
|
float c = (float)pe[2];
|
||||||
|
sprintf_s(dataStr, 250, "%g, %g, %g", a, b, c);
|
||||||
|
#endif
|
||||||
|
|
||||||
sw << dataStr << std::endl;
|
sw << dataStr << std::endl;
|
||||||
|
|
||||||
sw.close();
|
sw.close();
|
||||||
@ -225,7 +235,7 @@ void lineFitting_abc(std::vector< cv::Point2f>& inliers, double* _a, double* _b,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define MONO_CALIB_TEST_GROUP 5
|
#define MONO_CALIB_TEST_GROUP 6
|
||||||
int MonoCamLaserCalib()
|
int MonoCamLaserCalib()
|
||||||
{
|
{
|
||||||
std::cout << "Hello World!\n";
|
std::cout << "Hello World!\n";
|
||||||
@ -236,9 +246,12 @@ int MonoCamLaserCalib()
|
|||||||
"F:\\ShangGu\\ProductDev\\三角光相机\\相机开发\\CamAlgo_git\\camCalib\\camCalibData\\circlePoint\\", //2
|
"F:\\ShangGu\\ProductDev\\三角光相机\\相机开发\\CamAlgo_git\\camCalib\\camCalibData\\circlePoint\\", //2
|
||||||
"F:\\ShangGu\\ProductDev\\三角光相机\\相机开发\\CamAlgo_git\\camCalib\\camCalibData\\charuCo\\", //3
|
"F:\\ShangGu\\ProductDev\\三角光相机\\相机开发\\CamAlgo_git\\camCalib\\camCalibData\\charuCo\\", //3
|
||||||
"F:/ShangGu/单目相机标定数据/TestData/", //4
|
"F:/ShangGu/单目相机标定数据/TestData/", //4
|
||||||
|
"F:/ShangGu/单目相机标定数据/5_3mm_lens/", //5
|
||||||
|
|
||||||
};
|
};
|
||||||
const SWdNLRange fileIdx[MONO_CALIB_TEST_GROUP] = {
|
const SWdNLRange fileIdx[MONO_CALIB_TEST_GROUP] = {
|
||||||
{3,39},{6,33},{1,33},{1,10},{1,26}
|
{3,39},{6,33},{1,33},{1,10},{1,26},
|
||||||
|
{1,23}
|
||||||
};
|
};
|
||||||
const int boardType[MONO_CALIB_TEST_GROUP] =
|
const int boardType[MONO_CALIB_TEST_GROUP] =
|
||||||
{
|
{
|
||||||
@ -247,9 +260,10 @@ int MonoCamLaserCalib()
|
|||||||
CALIB_CIRCLE_GRID,
|
CALIB_CIRCLE_GRID,
|
||||||
CALIB_CHARUCO,
|
CALIB_CHARUCO,
|
||||||
CALIB_CHARUCO,
|
CALIB_CHARUCO,
|
||||||
|
CALIB_CHARUCO,
|
||||||
};
|
};
|
||||||
|
|
||||||
for(int grp = 4; grp <= 4; grp ++)
|
for(int grp = 5; grp <= 5; grp ++)
|
||||||
{
|
{
|
||||||
//grp = 1;
|
//grp = 1;
|
||||||
int calibType = boardType[grp];
|
int calibType = boardType[grp];
|
||||||
@ -574,10 +588,10 @@ int MonoCamLaserCalib()
|
|||||||
roi_T = roi_T > corners[i].y ? corners[i].y : roi_T;
|
roi_T = roi_T > corners[i].y ? corners[i].y : roi_T;
|
||||||
roi_B = roi_B < corners[i].y ? corners[i].y : roi_B;
|
roi_B = roi_B < corners[i].y ? corners[i].y : roi_B;
|
||||||
}
|
}
|
||||||
int left = (int)roi_L;
|
int left = (int)roi_L - 100;
|
||||||
if (left < 0)
|
if (left < 0)
|
||||||
left = 0;
|
left = 0;
|
||||||
int right = (int)roi_R;
|
int right = (int)roi_R + 100;
|
||||||
if (right >= chessMask.cols)
|
if (right >= chessMask.cols)
|
||||||
right = chessMask.cols - 1;
|
right = chessMask.cols - 1;
|
||||||
int top = (int)roi_T - 100;
|
int top = (int)roi_T - 100;
|
||||||
@ -776,10 +790,28 @@ int MonoCamLaserCalib()
|
|||||||
cv::Vec4f laser_pe = fitPlaneToPoints(all_pts3d);
|
cv::Vec4f laser_pe = fitPlaneToPoints(all_pts3d);
|
||||||
std::cout << "pe: " << laser_pe << std::endl;
|
std::cout << "pe: " << laser_pe << std::endl;
|
||||||
|
|
||||||
|
//转成以像素为坐标的方程
|
||||||
|
//ax+by+cz+d=0 形式
|
||||||
|
float a = (float)laser_pe[0];
|
||||||
|
float b = (float)laser_pe[1];
|
||||||
|
float c = (float)laser_pe[2];
|
||||||
|
float d = (float)laser_pe[3];
|
||||||
|
//
|
||||||
|
double f = K.at<double>(0, 0); // 第0行第0列
|
||||||
|
double cx = K.at<double>(0, 2); // 第0行第2列
|
||||||
|
double cy = K.at<double>(1, 2); // 第1行第2列
|
||||||
|
|
||||||
|
cv::Vec4f laser_pe_UV;
|
||||||
|
double mul_df = d * f;
|
||||||
|
laser_pe_UV[0] = -a / mul_df;
|
||||||
|
laser_pe_UV[1] = -b / mul_df;
|
||||||
|
laser_pe_UV[2] = (a * cx + b * cy) / mul_df - c / d;
|
||||||
|
laser_pe_UV[3] = 0;
|
||||||
|
|
||||||
//output K and D
|
//output K and D
|
||||||
char calibKDPName[256];
|
char calibKDPName[256];
|
||||||
sprintf_s(calibKDPName, "%sresult/calib_param_K_D.txt", calibDataPath[grp]);
|
sprintf_s(calibKDPName, "%sresult/calib_param_K_D.txt", calibDataPath[grp]);
|
||||||
sg_outputCalibKD(calibKDPName, K, D, laser_pe);
|
sg_outputCalibKD(calibKDPName, K, D, laser_pe_UV);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user