模板文件加载加入try保护

master
bob.pan 5 years ago
parent 7e2e4e23c7
commit bb525b5dd8

@ -295,6 +295,7 @@ bool ImageCompareModel::save2file(string filePath)
bool ImageCompareModel::readFromFile(string filePath) bool ImageCompareModel::readFromFile(string filePath)
{ {
try{
FileStorage fs(filePath, FileStorage::READ); FileStorage fs(filePath, FileStorage::READ);
if (!fs.isOpened()) if (!fs.isOpened())
{ {
@ -390,6 +391,10 @@ bool ImageCompareModel::readFromFile(string filePath)
genMask(); genMask();
return true; return true;
}
catch (std::exception &e) {
return false;
}
} }
void ImageCompareModel::preProcessImage(Mat& img, Mat &insideImg) const void ImageCompareModel::preProcessImage(Mat& img, Mat &insideImg) const
@ -520,34 +525,6 @@ double ImageCompareModel::compare(Mat srcImage, Mat* pRImg /*= NULL*/, int level
return cacheIter->second; return cacheIter->second;
} }
} }
/* CircleDetector cd;
cd.setAlgoType(CircleDetector::PeakCircle);
cd.setEdgeWidth(3);
//cd.setPolarity(Polarity::White2Black);
cd.setPolarity(Polarity::Either);
cd.setFindBy(FindBy::Best);
//cd.setFindBy(FindBy::Last);
cd.setRadii(MIN_CIRCLE_RADII, MAX_CIRCLE_RADII);
cd.setACThres(5);
Vec3f bestCircle;
cd.detectBest(srcImage, Point2f(srcImage.cols / 2, srcImage.rows / 2), bestCircle, nullptr);
#ifdef DEBUG_VIEW_INTERNAL_MAT
vector<Mat> vecs;
vecs.push_back(srcImage);
vecs.push_back(srcImage);
vecs.push_back(srcImage);
Mat rr;
merge(vecs, rr);
circle(rr, Point2f(bestCircle[0], bestCircle[1]), bestCircle[2], Scalar(255, 0, 0), 2);
#endif
if (bestCircle[2] < 3 || bestCircle[0] == 0 || bestCircle[1] == 0)
return DBL_MAX;
*/
// int x_Axis = bestCircle[0] - MAX_CIRCLE_RADII;
// int y_Axis = bestCircle[1] - MAX_CIRCLE_RADII;
int x_Axis = srcImage.cols / 2 - MAX_CIRCLE_RADII; int x_Axis = srcImage.cols / 2 - MAX_CIRCLE_RADII;
int y_Axis = srcImage.rows / 2 - MAX_CIRCLE_RADII; int y_Axis = srcImage.rows / 2 - MAX_CIRCLE_RADII;
@ -560,8 +537,6 @@ double ImageCompareModel::compare(Mat srcImage, Mat* pRImg /*= NULL*/, int level
return DBL_MAX; return DBL_MAX;
if (r_Axis >= srcImage.cols || r_Axis >= srcImage.rows) if (r_Axis >= srcImage.cols || r_Axis >= srcImage.rows)
return DBL_MAX; return DBL_MAX;
// if (srcImage.cols < (bestCircle[0] + MAX_CIRCLE_RADII) || srcImage.rows < (bestCircle[1] + MAX_CIRCLE_RADII))
// return DBL_MAX;
if (srcImage.cols < (srcImage.cols / 2 + MAX_CIRCLE_RADII) || srcImage.rows < (srcImage.rows / 2 + MAX_CIRCLE_RADII)) if (srcImage.cols < (srcImage.cols / 2 + MAX_CIRCLE_RADII) || srcImage.rows < (srcImage.rows / 2 + MAX_CIRCLE_RADII))
return DBL_MAX; return DBL_MAX;
@ -635,29 +610,7 @@ double ImageCompareModel::compare(Mat srcImage, Mat* pRImg /*= NULL*/, int level
Mat camInsideMat = rotateImage(centerMat, Point2f(centerMat.cols / 2.0, centerMat.rows / 2.0), Mat camInsideMat = rotateImage(centerMat, Point2f(centerMat.cols / 2.0, centerMat.rows / 2.0),
bestInsideAngle); bestInsideAngle);
// float offset = 5;
// float startX = mAlignBaseImg.cols / 2.0 - rInner - offset;
// float startY = mAlignBaseImg.rows / 2.0 - rInner - offset;
// Rect rect(startX, startY, 2*(rInner + offset), 2*(rInner + offset));
// Mat innerPartMat = camInsideMat(rect);
// Mat rstMat;
// cv::matchTemplate(innerTempl, innerPartMat, rstMat, CV_TM_SQDIFF_NORMED);
// double minVal;
// Point minLoc;
// minMaxLoc(rstMat, &minVal, NULL, &minLoc, NULL);
//#ifdef DEBUG_VIEW_INTERNAL_MAT
// Mat test1 = innerPartMat.clone();
// Mat test2 = innerPartMat.clone();
// vector<Mat> imgs;
// imgs.push_back(test2);
// imgs.push_back(test1);
// imgs.push_back(innerPartMat);
// Mat rst;
// merge(imgs, rst);
// cv::rectangle(rst, Rect(minLoc.x, minLoc.y, innerTempl.cols, innerTempl.rows), Scalar(0, 0, 255));
//#endif
// //debug
//
Mat highLightInsideMask = camInsideMat < mHighlightsThreshold; Mat highLightInsideMask = camInsideMat < mHighlightsThreshold;
converToType(highLightInsideMask, CV_32FC1); converToType(highLightInsideMask, CV_32FC1);
highLightInsideMask /= 255.0; highLightInsideMask /= 255.0;
@ -766,20 +719,7 @@ void ImageCompareModel::train(const vector<Mat>& vec)
#endif // DEBUG_VIEW_INTERNAL_MAT #endif // DEBUG_VIEW_INTERNAL_MAT
//bob edit //bob edit
// if (bestCircle[2] > 0.00000001)
// {
// float startX = bestCircle[0] - MAX_CIRCLE_RADII;//找最大圆外径,固定直径
// float startY = bestCircle[1] - MAX_CIRCLE_RADII;
// Rect rect(startX, startY, MAX_CIRCLE_RADII * 2, MAX_CIRCLE_RADII * 2);
// Mat origianlCenterMat;
// originalMat(rect).copyTo(origianlCenterMat);
// centerMatVec.push_back(origianlCenterMat);
// tmpVec.push_back(vec[i]);
// }
// else
// {
// int a = 0;
// }
float startX = originalMat.cols / 2.0 - MAX_CIRCLE_RADII;//找最大圆外径,固定直径 float startX = originalMat.cols / 2.0 - MAX_CIRCLE_RADII;//找最大圆外径,固定直径
float startY = originalMat.rows / 2.0 - MAX_CIRCLE_RADII; float startY = originalMat.rows / 2.0 - MAX_CIRCLE_RADII;
Rect rect(startX, startY, MAX_CIRCLE_RADII * 2, MAX_CIRCLE_RADII * 2); Rect rect(startX, startY, MAX_CIRCLE_RADII * 2, MAX_CIRCLE_RADII * 2);
@ -812,19 +752,6 @@ void ImageCompareModel::train(const vector<Mat>& vec)
/*bob end edit*/ /*bob end edit*/
// if (bestCircle[2] > 0.00000001)
// {
// float startX = bestCircle[0] - bestCircle[2];
// float startY = bestCircle[1] - bestCircle[2];
// Rect rect(startX, startY, bestCircle[2]*2, bestCircle[2]*2);
// Mat origianlCenterMat;
// originalMat(rect).copyTo(origianlCenterMat);
// centerMatVec.push_back(origianlCenterMat);
// }
// else
// {
//
// }
} }
mInnerCircleNum = insideCircleNumSum / vecSize; mInnerCircleNum = insideCircleNumSum / vecSize;
vector<Mat> scaledCenterVec; vector<Mat> scaledCenterVec;
@ -839,13 +766,7 @@ void ImageCompareModel::train(const vector<Mat>& vec)
mAlignBaseImg = imgVec.front(); mAlignBaseImg = imgVec.front();
mInSideBaseImg = scaledCenterVec.front(); mInSideBaseImg = scaledCenterVec.front();
genMask(); genMask();
//Mat baseTempl = imgVec.front();
//float realR = rInner + 2;
//float hf_width = sqrt(realR*realR / 2.0);
//float startx = baseTempl.cols / 2 - hf_width;
//float starty = baseTempl.rows / 2 - hf_width;
//Rect rect(startx, starty, 2*hf_width, 2*hf_width);
//innerTempl = baseTempl(rect);
preProcessImage(mAlignBaseImg, mInSideBaseImg);//预处理 光照均衡 preProcessImage(mAlignBaseImg, mInSideBaseImg);//预处理 光照均衡
Mat sumOutsideMat = Mat::zeros(mAlignBaseImg.size(), CV_32FC1); Mat sumOutsideMat = Mat::zeros(mAlignBaseImg.size(), CV_32FC1);
Mat sumInsideMat = Mat::zeros(mInSideBaseImg.size(), CV_32FC1); Mat sumInsideMat = Mat::zeros(mInSideBaseImg.size(), CV_32FC1);
@ -1107,10 +1028,6 @@ void ImageCompareModel::weightMapping(const Mat& mData, double maxVal, const Mat
double affineCoeff = descendFunction(pixVal, maxVal); double affineCoeff = descendFunction(pixVal, maxVal);
pWeight[j] *= affineCoeff; pWeight[j] *= affineCoeff;
} }
} }
} }
@ -1138,7 +1055,6 @@ double ImageCompareModel::descendFunction(double pixVal, double maxVal)
//return -1 * pow(pixVal, 2) + 1; //return -1 * pow(pixVal, 2) + 1;
} }
void ImageCompareModel::calculateAllParams(const vector<Mat>& imgVec) void ImageCompareModel::calculateAllParams(const vector<Mat>& imgVec)
{ {
mDisThre = DBL_MAX; mDisThre = DBL_MAX;
@ -1426,7 +1342,6 @@ ImageCompareModel* ImageCompareModel::scale(float s)
// //
// pRet->set8uMaskImg(mask8uImg); // pRet->set8uMaskImg(mask8uImg);
// pRet->set32fMaskImg(mask32fImg); // pRet->set32fMaskImg(mask32fImg);
return pRet; return pRet;
} }

Loading…
Cancel
Save