bagPosition version 1.1.0
(1)版本号(2)输出模式,支持按序输出和按大输出
This commit is contained in:
parent
c968264e05
commit
a582a10491
@ -2707,9 +2707,13 @@ int main()
|
||||
for (int i = 0; i < 9; i++)
|
||||
poseCalibPara.invRMatrix[i] = poseCalibPara.planeCalib[i];
|
||||
|
||||
const char* ver = sg_bagPositioningVersion();
|
||||
printf("ver:%s\n", ver);
|
||||
|
||||
char _scan_file[256];
|
||||
|
||||
SG_bagPositionParam algoParam;
|
||||
algoParam.outputMode = 0; //0-按序输出(左上),1-按大小输出(最大)
|
||||
int endGroup = TEST_GROUP - 1;
|
||||
for (int grp = 0; grp <= 19; grp++)
|
||||
{
|
||||
|
||||
@ -5,6 +5,13 @@
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include <limits>
|
||||
|
||||
//version 1.1.0 : 基准版本基础上添加了(1)版本号(2)输出模式,支持按序输出和按大输出
|
||||
std::string m_strVersion = "1.1.0";
|
||||
const char* sg_bagPositioningVersion(void)
|
||||
{
|
||||
return m_strVersion.c_str();
|
||||
}
|
||||
|
||||
void sg_lineDataR(SVzNL3DLaserLine* a_line,
|
||||
const double* camPoseR,
|
||||
double groundH)
|
||||
@ -61,14 +68,20 @@ cv::Point2f _rotate2D(cv::Point2f pt, double sinTheta, double cosTheta)
|
||||
return (cv::Point2f((float)(pt.x*cosTheta-pt.y*sinTheta), (float)(pt.x*sinTheta+pt.y*cosTheta)));
|
||||
}
|
||||
|
||||
//从大到小
|
||||
bool compareByHeight(const SSG_2DValueI& a, const SSG_2DValueI& b) {
|
||||
return a.valueD > b.valueD;
|
||||
}
|
||||
|
||||
//从左到右
|
||||
bool compareByXValue(const SSG_peakRgnInfo& a, const SSG_peakRgnInfo& b) {
|
||||
return a.centerPos.x < b.centerPos.x;
|
||||
}
|
||||
|
||||
bool compareBySize(const SSG_peakRgnInfo& a, const SSG_peakRgnInfo& b)
|
||||
{
|
||||
return ((a.objSize.dWidth * a.objSize.dHeight) > (b.objSize.dWidth * b.objSize.dHeight));
|
||||
}
|
||||
//检查是否是孤立突起
|
||||
bool _LRChkAbnormal(SVzNL3DLaserLine* laser3DPoints, int lineNum, int col, int y, int abnormalChkWin)
|
||||
{
|
||||
@ -2212,6 +2225,7 @@ SSG_2DValueI _backIndexingPeakPos(SSG_2DValueI dt_pk, cv::Mat& distTranformIndex
|
||||
}
|
||||
return { 0 , 0 };
|
||||
}
|
||||
|
||||
///数据输入必须是grid格式,以进行水平方向和垂直方向的处理
|
||||
///(1)寻找边界点
|
||||
///(2)从最高点开始进行区域生长
|
||||
@ -3817,6 +3831,8 @@ if (i == 3)
|
||||
peakRgns.clear();
|
||||
peakRgns.insert(peakRgns.end(), level0_objs.begin(), level0_objs.end());
|
||||
int level0_size = (int)peakRgns.size();
|
||||
if (algoParam.outputMode == 0) //按序输出
|
||||
{
|
||||
if (level0_size > 1) //进一步排序,分行
|
||||
{
|
||||
//取Y最小的目标
|
||||
@ -3862,6 +3878,12 @@ if (i == 3)
|
||||
else
|
||||
objOps.insert(objOps.end(), peakRgns.begin(), peakRgns.end());
|
||||
}
|
||||
else //按大小输出,从在到小
|
||||
{
|
||||
std::sort(peakRgns.begin(), peakRgns.end(), compareBySize);
|
||||
objOps.insert(objOps.end(), peakRgns.begin(), peakRgns.end());
|
||||
}
|
||||
}
|
||||
//碰撞检测
|
||||
if ((objOps.size() > 0) && (smallObjPeaks.size() > 0))
|
||||
{
|
||||
|
||||
@ -27,6 +27,7 @@ typedef struct
|
||||
//SSG_objSortParam sortParam;
|
||||
//SSG_polarScanParam polarScanParam;
|
||||
int supportRotate;
|
||||
int outputMode; //0 - 按序输出, 1 - 从大到小输出
|
||||
}SG_bagPositionParam;
|
||||
|
||||
typedef struct
|
||||
@ -46,6 +47,9 @@ typedef struct
|
||||
double baseHoleDist; //托盘两个孔洞的距离
|
||||
}SSG_stackBaseParam;
|
||||
|
||||
//读版本号
|
||||
SG_APISHARED_EXPORT const char* sg_bagPositioningVersion(void);
|
||||
|
||||
//数据调平
|
||||
SG_APISHARED_EXPORT void sg_lineDataR(
|
||||
SVzNL3DLaserLine* a_line,
|
||||
|
||||
@ -343,12 +343,32 @@ SG_APISHARED_EXPORT void lineFitting(
|
||||
double* _k,
|
||||
double* _b);
|
||||
|
||||
//拟合成通用直线方程,包括垂直
|
||||
SG_APISHARED_EXPORT void lineFitting_abc(
|
||||
std::vector< SVzNL3DPoint>& inliers,
|
||||
double* _a,
|
||||
double* _b,
|
||||
double* _c);
|
||||
|
||||
SG_APISHARED_EXPORT SVzNL3DPoint computeLineCrossPt_abs(
|
||||
double a1, double b1, double c1,
|
||||
double a2, double b2, double c2);
|
||||
|
||||
//计算垂足点,直线方程:y = kx + b
|
||||
SG_APISHARED_EXPORT SVzNL2DPointD sx_getFootPoint(
|
||||
double x0,
|
||||
double y0,
|
||||
double k,
|
||||
double b);
|
||||
|
||||
//计算垂足点,直线方程:ax+by+c = 0
|
||||
SG_APISHARED_EXPORT SVzNL2DPointD sx_getFootPoint_abc(
|
||||
double x0,
|
||||
double y0,
|
||||
double A,
|
||||
double B,
|
||||
double C);
|
||||
|
||||
//BresenhamËã·¨
|
||||
SG_APISHARED_EXPORT void drawLine(
|
||||
int x0,
|
||||
|
||||
@ -234,6 +234,7 @@ void lineFitting(std::vector< SVzNL3DPoint>& inliers, double* _k, double* _b)
|
||||
*_b = (-x_sum * xy_sum + xx_sum * y_sum) / (num * xx_sum - x_sum * x_sum);//根据公式求解b
|
||||
}
|
||||
|
||||
//计算垂足点,直线方程:y = kx + b
|
||||
SVzNL2DPointD sx_getFootPoint(double x0, double y0, double k, double b)
|
||||
{
|
||||
double A = k;
|
||||
@ -245,6 +246,14 @@ SVzNL2DPointD sx_getFootPoint(double x0, double y0, double k, double b)
|
||||
return foot;
|
||||
}
|
||||
|
||||
//计算垂足点,直线方程:ax+by+c = 0
|
||||
SVzNL2DPointD sx_getFootPoint_abc(double x0, double y0, double A, double B, double C)
|
||||
{
|
||||
SVzNL2DPointD foot;
|
||||
foot.x = (B * B * x0 - A * B * y0 - A * C) / (A * A + B * B);
|
||||
foot.y = (-A * B * x0 + A * A * y0 - B * C) / (A * A + B * B);
|
||||
return foot;
|
||||
}
|
||||
#if 0
|
||||
void icvprCcaByTwoPass(const cv::Mat& binImg, cv::Mat& lableImg)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user