diff --git a/camAlgoSW/sourceCode/CG_frontEnd/Demo/ImgUtils.cpp b/camAlgoSW/sourceCode/CG_frontEnd/Demo/ImgUtils.cpp
index c4349dd..a91104c 100644
--- a/camAlgoSW/sourceCode/CG_frontEnd/Demo/ImgUtils.cpp
+++ b/camAlgoSW/sourceCode/CG_frontEnd/Demo/ImgUtils.cpp
@@ -113,7 +113,8 @@ void SvPickRgnRslt(
char * BmpDstFileName
)
{
- char *TXTData = (char *)malloc(256);
+ //char *TXTData = (char *)malloc(256);
+ char TXTData[256];
memset(TXTData,0,256);
std::ofstream TXTFile(TxtDstFileName);
@@ -207,7 +208,7 @@ void SvPickRgnRslt(
}
TXTFile.close();
- free(TXTData);
+ //free(TXTData);
unsigned char *DstR = (unsigned char *)malloc(FrmH*FrmW);
unsigned char *DstG = (unsigned char *)malloc(FrmH*FrmW);
diff --git a/camAlgoSW/sourceCode/CG_frontEnd/Demo/main.cpp b/camAlgoSW/sourceCode/CG_frontEnd/Demo/main.cpp
index 8e675a8..524091f 100644
--- a/camAlgoSW/sourceCode/CG_frontEnd/Demo/main.cpp
+++ b/camAlgoSW/sourceCode/CG_frontEnd/Demo/main.cpp
@@ -101,8 +101,10 @@ int main(int argc, char** argv)
ProcObjInst[Grp_idx].SrcFileDir = (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].DstFileDir, "D:/LicgWork/ToExt/PickLazerWin/SimRslt/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].SrcFileDir, "F:/Licg/CModelPrj/SimCaseSet/TstSrc/Grp_0/");
+ sprintf(ProcObjInst[Grp_idx].DstFileDir, "F:/Licg/CModelPrj/SimCaseSet/SimRslt/Grp_0/");
int ret = 0;
diff --git a/camAlgoSW_test/camAlgoSW_test.vcxproj b/camAlgoSW_test/camAlgoSW_test.vcxproj
index cbec48f..cf46f37 100644
--- a/camAlgoSW_test/camAlgoSW_test.vcxproj
+++ b/camAlgoSW_test/camAlgoSW_test.vcxproj
@@ -124,7 +124,7 @@
Console
true
- F:\ShangGu\ProductDev\AlgoDev\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;.\sourceCode\CG_frontEnd\lib\debug;%(AdditionalLibraryDirectories)
+ ..\build\x64\Debug;.\sourceCode\CG_frontEnd\lib\debug;D:\zeng\AlgoDev\thirdParty\opencv320\build\include;%(AdditionalLibraryDirectories)
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)
@@ -143,7 +143,7 @@
true
true
true
- 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)
+ ..\build\x64\Release;F:\ShangGu\ProductDev\三角光相机\相机开发\camAlgo_git\camAlgoSW\sourceCode\CG_frontEnd\lib\debug;D:\zeng\AlgoDev\thirdParty\opencv320\build\include;%(AdditionalLibraryDirectories)
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)
diff --git a/camCalib/camCalib.cpp b/camCalib/camCalib.cpp
index 680125d..625bd79 100644
--- a/camCalib/camCalib.cpp
+++ b/camCalib/camCalib.cpp
@@ -11,7 +11,8 @@
#define _DO_CAMERA_CALIB 1
//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)
{
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]);
sw << dataStr << std::endl;
+#if 0
//ax+by+cz+d = 0
float a = (float)pe[0];
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;
c = -1;
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.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()
{
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\\charuCo\\", //3
"F:/ShangGu/单目相机标定数据/TestData/", //4
+ "F:/ShangGu/单目相机标定数据/5_3mm_lens/", //5
+
};
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] =
{
@@ -247,9 +260,10 @@ int MonoCamLaserCalib()
CALIB_CIRCLE_GRID,
CALIB_CHARUCO,
CALIB_CHARUCO,
+ CALIB_CHARUCO,
};
- for(int grp = 4; grp <= 4; grp ++)
+ for(int grp = 5; grp <= 5; grp ++)
{
//grp = 1;
int calibType = boardType[grp];
@@ -574,10 +588,10 @@ int MonoCamLaserCalib()
roi_T = roi_T > corners[i].y ? corners[i].y : roi_T;
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)
left = 0;
- int right = (int)roi_R;
+ int right = (int)roi_R + 100;
if (right >= chessMask.cols)
right = chessMask.cols - 1;
int top = (int)roi_T - 100;
@@ -776,10 +790,28 @@ int MonoCamLaserCalib()
cv::Vec4f laser_pe = fitPlaneToPoints(all_pts3d);
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(0, 0); // 第0行第0列
+ double cx = K.at(0, 2); // 第0行第2列
+ double cy = K.at(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
char calibKDPName[256];
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;
}