算法更新

This commit is contained in:
2024-12-08 14:52:51 +08:00
parent 97765a72e0
commit a0f5e6f0ee
7 changed files with 367 additions and 156 deletions
@@ -871,13 +871,15 @@ bool Hd_AI_algo_fanMianTieJiao::AIdetect(cv::Mat img2D, QString mysaveKey, QStri
else
cv::rectangle(Paint, paintRectDown, cv::Scalar(0, 0, 255), 50);
if ((res1 == 0 || res1 == 2) && (res2 == 0 || res2 == 2))//OK
putTextHusky(Paint, byteArrayToUnicode("有贴胶").toStdString().c_str(), cv::Point(0, 50), cv::Scalar(0, 255, 0), 500);
else
putTextHusky(Paint, byteArrayToUnicode("无贴胶").toStdString().c_str(), cv::Point(0, 50), cv::Scalar(0, 0, 255), 500);
//if ((res1 == 0 || res1 == 2) && (res2 == 0 || res2 == 2))//OK
// putTextHusky(Paint, byteArrayToUnicode("有贴胶").toStdString().c_str(), cv::Point(0, 50), cv::Scalar(0, 255, 0), 500);
//else
// putTextHusky(Paint, byteArrayToUnicode("无贴胶").toStdString().c_str(), cv::Point(0, 50), cv::Scalar(0, 0, 255), 500);
}
else
putTextHusky(Paint, byteArrayToUnicode("无物料").toStdString().c_str(), cv::Point(0, 50), cv::Scalar(0, 0, 255), 500);
{
//putTextHusky(Paint, byteArrayToUnicode("无物料").toStdString().c_str(), cv::Point(0, 50), cv::Scalar(0, 0, 255), 500);
}
resMat.push_back(Paint);
QJsonArray detaillists;
//QByteArrayList resQbyte;
@@ -826,7 +826,7 @@ bool Hd_AI_algo_hanHouCeLiang::AIdetect(cv::Mat img2D, QString mysaveKey, QStrin
// csvName.close();
//}
//sourceImg = cv::imread("D:\\mySN15-46-33-86.bmp",-1);
//sourceImg = cv::imread("D:/CCD/Image_20241017202132775.bmp", -1);
cv::Mat Paint;
sourceImg.copyTo(Paint);
if(Paint.channels() == 1)
@@ -829,7 +829,7 @@ bool Hd_AI_algo_hanQianCeLiang::AIdetect(cv::Mat img2D, QString mysaveKey, QStri
// csvName.close();
//}
//sourceImg = cv::imread("D:\\mySN15-46-33-86.bmp",-1);
//sourceImg = cv::imread("D:/1/2820698.bmp", -1);
sourceImg = cv::imread("E:/628/hanqian/ORI_DA3442464_0_10-00-56-82.bmp", -1);
cv::Mat Paint;
sourceImg.copyTo(Paint);
if(Paint.channels() == 1)
@@ -837,24 +837,25 @@ bool Hd_AI_algo_hanQianCeLiang::AIdetect(cv::Mat img2D, QString mysaveKey, QStri
HObject ho_Image_L;
HObject ho_Image_T;
HTuple hv_Pix_T(0.02);
HTuple hv_Pix_L(0.02);
HTuple hv_Pix_T(0.038);
HTuple hv_Pix_L(0.038);
HTuple hv_Out_Vale_L;
HTuple hv_Out_Line_L;
HTuple hv_Out_Vale_T;
HTuple hv_Out_Line_T;
HTuple hv_Out_extremum_Value;
HTuple hv_Makes;
HTuple hv_Models(0);
HTuple hv_Path("./halconFiles/");
MatToHObject(sourceImg, &ho_Image_L);
while (g_unionCalculate->getData(ho_Image_T) == false)
QThread::msleep(1);
_628_2_BeforeWelding_Distnce(ho_Image_L,ho_Image_T,hv_Pix_T,hv_Pix_L,
_628_2_BeforeWelding_Distnce(ho_Image_L,ho_Image_T,hv_Pix_T,hv_Pix_L, hv_Models, hv_Path,
&hv_Out_Vale_L,&hv_Out_Line_L,& hv_Out_Vale_T,
&hv_Out_Line_T,& hv_Out_extremum_Value,&hv_Makes);
if(hv_Makes.D() == 1)
{
double Out_Vale_L_0 = hv_Out_Vale_L[0].D();
double Out_Vale_L_1 = hv_Out_Vale_L[1].D();
double extremum_Value = hv_Out_extremum_Value.D();
int Out_Line_L_length = hv_Out_Line_L.Length();
int Out_Line_T_length = hv_Out_Line_T.Length();
@@ -862,23 +863,25 @@ bool Hd_AI_algo_hanQianCeLiang::AIdetect(cv::Mat img2D, QString mysaveKey, QStri
//发送到另一算法线程
unionCalculate::calResult _calResult;
_calResult.toLeft = hv_Out_Vale_T[0].D();
_calResult.toDown = hv_Out_Vale_T[1].D();
//_calResult.toDown = hv_Out_Vale_T[1].D();
_calResult.extremumValue = extremum_Value;
for (int i = 0; i < Out_Line_T_length; i++)
_calResult.lines.push_back(hv_Out_Line_T[i].D());
g_unionCalculate->insertResult(_calResult);
//Paint
std::string text1 = "上间距:" + std::to_string(Out_Vale_L_1);
text1 = text1.substr(0, text1.find(".") + 4) + "mm";
putTextHusky(Paint,
byteArrayToUnicode(QByteArray::fromStdString(text1)).toStdString().c_str(),
cv::Point(50, 50), cv::Scalar(0, 0, 255), 280);
std::string text2 = " 下间距:" + std::to_string(Out_Vale_L_0);
//std::string text1 = "上间距:" + std::to_string(Out_Vale_L_1);
//text1 = text1.substr(0, text1.find(".") + 4) + "mm";
//putTextHusky(Paint,
// byteArrayToUnicode(QByteArray::fromStdString(text1)).toStdString().c_str(),
// cv::Point(50, 50), cv::Scalar(0, 0, 255), 280);
std::string text2 = " 芯包间距:" + std::to_string(Out_Vale_L_0);
text2 = text2.substr(0, text2.find(".") + 4) + "mm";
putTextHusky(Paint,
byteArrayToUnicode(QByteArray::fromStdString(text2)).toStdString().c_str(),
cv::Point(50, 300), cv::Scalar(0, 0, 255), 280);
cv::Point(50, 50), cv::Scalar(0, 0, 255), 280);
std::string text3 = " 极间距:" + std::to_string(extremum_Value);
text2 = text2.substr(0, text3.find(".") + 4) + "mm";
putTextHusky(Paint,
@@ -816,7 +816,8 @@ bool Hd_AI_algo_hanQianCeLiang::AIdetect(cv::Mat img2D, QString mysaveKey, QStri
obj.insert("SN", "mySN");
obj.insert("DataTime", "myDataTime");
// sourceImg = cv::imread("D:/1/2813489.bmp", -1);
sourceImg = cv::imread("E:/628/hanqian/ORI_DA3442353_0_10-00-56-47.bmp", -1);
cv::Mat Paint;
sourceImg.copyTo(Paint);
if (Paint.channels() == 1)
@@ -835,18 +836,19 @@ bool Hd_AI_algo_hanQianCeLiang::AIdetect(cv::Mat img2D, QString mysaveKey, QStri
if(_calResult.algoFailed == false)
{
//Paint
std::string text1 = "上间距:" + std::to_string(_calResult.toLeft);
std::string text1 = "芯包间距:" + std::to_string(_calResult.toLeft);
text1 = text1.substr(0, text1.find(".") + 4) + "mm";
putTextHusky(Paint,
byteArrayToUnicode(QByteArray::fromStdString(text1)).toStdString().c_str(),
cv::Point(50, 50), cv::Scalar(0, 0, 255), 280);
std::string text2 = " 下间距:" + std::to_string(_calResult.toDown);
text2 = text2.substr(0, text2.find(".") + 4) + "mm";
putTextHusky(Paint,
byteArrayToUnicode(QByteArray::fromStdString(text2)).toStdString().c_str(),
cv::Point(50, 300), cv::Scalar(0, 0, 255), 280);
//std::string text2 = " 芯包间距:" + std::to_string(_calResult.toDown);
//text2 = text2.substr(0, text2.find(".") + 4) + "mm";
//putTextHusky(Paint,
// byteArrayToUnicode(QByteArray::fromStdString(text2)).toStdString().c_str(),
// cv::Point(50, 300), cv::Scalar(0, 0, 255), 280);
std::string text3 = " 极间距:" + std::to_string(_calResult.extremumValue);
text2 = text2.substr(0, text3.find(".") + 4) + "mm";
text3 = text3.substr(0, text3.find(".") + 4) + "mm";
putTextHusky(Paint,
byteArrayToUnicode(QByteArray::fromStdString(text3)).toStdString().c_str(),
cv::Point(50, 550), cv::Scalar(0, 0, 255), 280);
Binary file not shown.
+333 -129
View File
@@ -8,59 +8,73 @@
using namespace HalconCpp;
#if 1 后端调用函数
#if 1 后端调用函数
/*
ho_Image:输入原图
hv_out_Value:输出检测结果 1为铝,2为铜
hv_Make:算法执行状态-1为算法NG,1为算法ok
极性检测函数
预焊三协机台
ho_Image:输入原图
hv_out_Value:输出检测结果 1为铝,2为铜
hv_Make:算法执行状态-1为算法NG,1为算法ok
极性检测函数
预焊三协机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_1_Polarity_detection(HObject ho_Image, HTuple* hv_out_Value, HTuple* hv_Make);
/*
* ho_Image:输入图片(原图)
* hv_NinePointDocument:九点文件的路径
* hv_SetNumber:设置胶钉的最小个数
* hv_Circle_Point:输出放钉孔的圆心x,圆心y,半径。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行
*hv_Out_Roboot1:吸嘴1-> 吸嘴编号,x绝对坐标,y绝对坐标
* hv_Out_Roboot2:吸嘴2->吸嘴编号,x绝对坐标,y绝对坐标
* hv_Out_Roboot3:吸嘴3->吸嘴编号,x绝对坐标,y绝对坐标
* 机器人引导函数
* 三协机台
* ho_Image:输入图片(原图)
* hv_NinePointDocument:九点文件的路径
* hv_SetNumber:设置胶钉的最小个数
* hv_Circle_Point:输出放钉孔的圆心x,圆心y,半径。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行
*hv_Out_Roboot1:吸嘴1-> 吸嘴编号,x绝对坐标,y绝对坐标
* hv_Out_Roboot2:吸嘴2->吸嘴编号,x绝对坐标,y绝对坐标
* hv_Out_Roboot3:吸嘴3->吸嘴编号,x绝对坐标,y绝对坐标
* hv_StartRun: 1启动振动盘,2不启动振动盘
* 机器人引导函数
* 三协机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_BootTheMachine(HObject ho_Image, HTuple hv_NinePointDocument, HTuple hv_SetNumber,
HTuple* hv_Circle_Point, HTuple* hv_Make, HTuple* hv_Out_Roboot1, HTuple* hv_Out_Roboot2,HTuple* hv_Out_Roboot3);
extern "C" __declspec(dllexport) void _stdcall _628_BootTheMachine(HObject ho_Image, HTuple hv_NinePointDocument, HTuple hv_SetNumber,
HTuple* hv_Circle_Point, HTuple* hv_Make, HTuple* hv_Out_Roboot1, HTuple* hv_Out_Roboot2,
HTuple* hv_Out_Roboot3, HTuple* hv_StartRun);
/*
*ho_Image:输入图片(原图)
* hv_Pix:像素精度
* hv_out_line:输出直线坐标
* hv_distance:输出测量值 ->高,宽。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行
* 铜极耳裁剪测量函数
* 三协预焊机台
*ho_Image:输入图片(原图)
* hv_Pix:像素精度
* hv_out_line:输出直线坐标
* hv_distance:输出测量值 ->高,宽。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行
* 铜极耳裁剪测量函数
* 三协预焊机台
*/
extern "C" __declspec(dllexport) void _stdcall cs_628_jier_T(HObject ho_Image, HTuple hv_Pix, HTuple* hv_out_line, HTuple* hv_out_Soldering_line,
extern "C" __declspec(dllexport) void _stdcall cs_628_jier_T(HObject ho_Image, HObject ho_seg, HTuple hv_Pix, HTuple* hv_out_line,
HTuple* hv_out_Soldering_line, HTuple* hv_distance, HTuple* hv_Make);
/*
*ho_Image:输入图片(原图)
* hv_Pix:像素精度
* hv_out_line:输出直线坐标
* hv_distance:输出测量值 ->高,宽。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行
* 铝极耳裁剪测量函数
* 三协预焊机台
*/
extern "C" __declspec(dllexport) void _stdcall cs_628_jier_L(HObject ho_Image, HObject ho_seg, HTuple hv_Pix, HTuple* hv_out_line,
HTuple* hv_distance, HTuple* hv_Make);
/*
* ho_Image:输入图片(原图)
* hv_model:赋值为1时是基准标定模式,0为正常检测模式
* hv_BenchmarkFile:基准标定文件的路径
* hv_NinePointDocument:九点文件的路径
*hv_CameraNumber:上钉相机编号
* hv_out_Cirle:输出放钉孔的圆心x,圆心y,半径。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行,输出为2为基准标定成功
* hv_offset_x:x轴方向上相对于基准位置的偏差
* hv_offset_y:y轴方向上相对于基准位置的偏差
* 打钉钉引导函数
* 三协的机台
* ho_Image:输入图片(原图)
* hv_model:赋值为1时是基准标定模式,0为正常检测模式
* hv_BenchmarkFile:基准标定文件的路径
* hv_NinePointDocument:九点文件的路径
*hv_CameraNumber:上钉相机编号
* hv_out_Cirle:输出放钉孔的圆心x,圆心y,半径。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行,输出为2为基准标定成功
* hv_offset_x:x轴方向上相对于基准位置的偏差
* hv_offset_y:y轴方向上相对于基准位置的偏差
* 打钉钉引导函数
* 三协的机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_NailingPosition(HObject ho_Image, HTuple hv_model, HTuple hv_BenchmarkFile,
@@ -69,47 +83,48 @@ extern "C" __declspec(dllexport) void _stdcall _628_NailingPosition(HObject ho_I
/*
ho_Image:输入原图
hv_out_Value:输出检测结果[1,1] .1为铝,[2,2] 2为铜
hv_Make:算法执行状态-1为算法NG,1为算法ok
极性检测函数
终焊三协机台
ho_Image:输入原图
hv_out_Value:输出检测结果[1,1] .1为铝,[2,2] 2为铜 ,0为无料
hv_Make:算法执行状态-1为算法NG,1为算法ok
极性检测函数
终焊三协机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_2_Polarity_detection(HObject ho_Image, HTuple* hv_out_Value, HTuple* hv_Make);
/*
* ho_Image_L:输入图片铝
* ho_Image_T:输入图片铜
* hv_Pix_T:铜极像素精度
* hv_Pix_L:铝极像素精度
* hv_Out_Vale_L:输出铝极测量值包括两个值
* hv_Out_Line_L:输出铝极划线坐标
* hv_Out_Vale_T:输出铝极测量值包括两个值
* hv_Out_Line_T:输出铜极极划线坐标
* hv_Out_extremum_Value:输出两极之间的距离
* hv_Make:输出-1为算法错误,输出1为算法正常执行
* 预焊焊前测量函数
* 三协的机台
* ho_Image_L:输入图片铝
* ho_Image_T:输入图片铜
* hv_Pix_T:铜极像素精度
* hv_Pix_L:铝极像素精度
* hv_Out_Vale_L:输出铝极测量值包括两个值
* hv_Out_Line_L:输出铝极划线坐标
* hv_Out_Vale_T:输出铝极测量值包括两个值
* hv_Out_Line_T:输出铜极极划线坐标
* hv_Out_extremum_Value:输出两极之间的距离
* hv_Make:输出-1为算法错误,输出1为算法正常执行
* 预焊焊前测量函数
* 三协的机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_2_BeforeWelding_Distnce(HObject ho_Image_L, HObject ho_Image_T, HTuple hv_Pix_T,
HTuple hv_Pix_L, HTuple* hv_Out_Vale_L, HTuple* hv_Out_Line_L, HTuple* hv_Out_Vale_T,
HTuple* hv_Out_Line_T, HTuple* hv_Out_extremum_Value, HTuple* hv_Makes);
HTuple hv_Pix_L, HTuple hv_Models, HTuple hv_Path, HTuple* hv_Out_Vale_L, HTuple* hv_Out_Line_L,
HTuple* hv_Out_Vale_T, HTuple* hv_Out_Line_T, HTuple* hv_Out_extremum_Value,
HTuple* hv_Makes);
/*
* ho_Image :输入图片铝极
* ho_ImageSeg :输入图片seg图(二值图)
* hv_Pix : 铝极像素精度
* hv_Out_TopLeft_Line : 左上输出线的端点坐标
* hv_Out_TopLeft_Value :左上输出的测量值(2个值)
* hv_Out_TopRight_Line :右上输出线的端点坐标
* hv_Out_TopRight_Value :右上输出的测量值(2个值)
* hv_Out_BottomLeft_Line :左下输出线的端点坐标
* hv_Out_BottomLeft_Value :左下输出的测量值(2个值)
** hv_Out_BottomRight_Line :右下输出线的端点坐标
* hv_Out_BottomRight_Value :右下输出的测量值(2个值)
* hv_Make:输出-1为算法错误,输出1为算法正常执行
* 预焊焊后测量铝极函数
* 三协的机台
* ho_Image :输入图片铝极
* ho_ImageSeg :输入图片seg图(二值图)
* hv_Pix : 铝极像素精度
* hv_Out_TopLeft_Line : 左上输出线的端点坐标
* hv_Out_TopLeft_Value :左上输出的测量值(2个值)
* hv_Out_TopRight_Line :右上输出线的端点坐标
* hv_Out_TopRight_Value :右上输出的测量值(2个值)
* hv_Out_BottomLeft_Line :左下输出线的端点坐标
* hv_Out_BottomLeft_Value :左下输出的测量值(2个值)
** hv_Out_BottomRight_Line :右下输出线的端点坐标
* hv_Out_BottomRight_Value :右下输出的测量值(2个值)
* hv_Make:输出-1为算法错误,输出1为算法正常执行
* 预焊焊后测量铝极函数
* 三协的机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_AfterWelding_Distance_L(HObject ho_Image, HObject ho_ImageSeg, HTuple hv_Pix,
@@ -118,20 +133,20 @@ extern "C" __declspec(dllexport) void _stdcall _628_AfterWelding_Distance_L(HObj
HTuple* hv_Out_BottomRight_Line, HTuple* hv_Out_BottomRight_Value, HTuple* hv_Make);
/*
* ho_Image :输入图片铝极
* ho_ImageSeg :输入图片seg图(二值图)
* hv_Pix : 铝极像素精度
* hv_Out_TopLeft_Line : 左上输出线的端点坐标
* hv_Out_TopLeft_Value :左上输出的测量值(2个值)
* hv_Out_TopRight_Line :右上输出线的端点坐标
* hv_Out_TopRight_Value :右上输出的测量值(2个值)
* hv_Out_BottomLeft_Line :左下输出线的端点坐标
* hv_Out_BottomLeft_Value :左下输出的测量值(2个值)
** hv_Out_BottomRight_Line :右下输出线的端点坐标
* hv_Out_BottomRight_Value :右下输出的测量值(2个值)
* hv_Make:输出-1为算法错误,输出1为算法正常执行
* 预焊焊后测量铜极函数
* 三协的机台
* ho_Image :输入图片铝极
* ho_ImageSeg :输入图片seg图(二值图)
* hv_Pix : 铝极像素精度
* hv_Out_TopLeft_Line : 左上输出线的端点坐标
* hv_Out_TopLeft_Value :左上输出的测量值(2个值)
* hv_Out_TopRight_Line :右上输出线的端点坐标
* hv_Out_TopRight_Value :右上输出的测量值(2个值)
* hv_Out_BottomLeft_Line :左下输出线的端点坐标
* hv_Out_BottomLeft_Value :左下输出的测量值(2个值)
** hv_Out_BottomRight_Line :右下输出线的端点坐标
* hv_Out_BottomRight_Value :右下输出的测量值(2个值)
* hv_Make:输出-1为算法错误,输出1为算法正常执行
* 预焊焊后测量铜极函数
* 三协的机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_AfterWelding_Distance_T(HObject ho_Image, HObject ho_ImageSeg, HTuple hv_Pix,
@@ -139,6 +154,96 @@ extern "C" __declspec(dllexport) void _stdcall _628_AfterWelding_Distance_T(HObj
HTuple* hv_Out_TopRight_Value, HTuple* hv_Out_BottomLeft_Line, HTuple* hv_Out_BottomLeft_Value,
HTuple* hv_Out_BottomRight_Line, HTuple* hv_Out_BottomRight_Value, HTuple* hv_Make);
/*
* ho_Image :输入图片
* hv_Out_Rectangle : 输出矩形的两个顶点坐标
* hv_Text :输出检测信息字符串格式
* hv_Make:输出-1为算法错误,输出1为算法正常执行
*软连接热熔工位函数
* 三协的机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_3_TopCoverMelted(HObject ho_Image, HTuple* hv_Out_Rectangle, HTuple* hv_Make,
HTuple* hv_Text);
/*
* ho_Image_L :输入图片(铝)
* ho_Image_T :输入图片(铜)
* hv_Pix_L :铝极相机像素精度
* hv_Pix_T :铜极相机像素精度
* hv_Out_Line_T :铜极输出线的端点坐标(需判断个数)
* hv_Out_Point_T :铜极输出中心圆的中心坐标及半径
* hv_Out_Chamfering_T :铜极输出倒角值
* hv_Distances_T :铜极输出上下,左右距离
* hv_Out_Line_L :铝极输出线的端点坐标(需判断个数)
* hv_Out_Point_L :铝极输出中心圆的中心坐标及半径
* hv_Out_Chamfering_L :铝极输出倒角值
* hv_Distances_L :铝极输出上下,左右距离
* hv_Out_InterpoleValue :输出两极柱之间距离
* hv_Makes:输出-1为算法错误,输出1为算法正常执行
*软连接极柱测量工位函数
* 三协的机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_3_PoleDetections(HObject ho_Image_L, HObject ho_Image_T, HTuple hv_Pix_L,
HTuple hv_Pix_T, HTuple* hv_Out_Line_T, HTuple* hv_Out_Point_T, HTuple* hv_Out_Chamfering_T,
HTuple* hv_Distances_T, HTuple* hv_Out_Line_L, HTuple* hv_Out_Point_L, HTuple* hv_Out_Chamfering_L,
HTuple* hv_Distances_L, HTuple* hv_Out_InterpoleValue, HTuple* hv_Makes);
/*
* ho_Image :输入图片
* hv_Pix :相机像素精度
* hv_Distance_Value :间距测量值
* hv_Out_Point :输出防爆阀中心点和二维码中心点距离
* hv_Makes:输出-1为算法错误,输出1为算法正常执行
*软连接防爆阀与二维码之间距离测量函数
* 三协的机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_3_ExplosionProofValves(HObject ho_Image, HTuple hv_Pix, HTuple* hv_Distance_Value,
HTuple* hv_Out_Point, HTuple* hv_Make);
/*
* ho_Image :输入图片
* hv_Pix :相机像素精度
* hv_Distances :间距测量值两个值
* hv_Out_line :输出测量线段的端点坐标(判断长度)
* hv_Makes:输出-1为算法错误,输出1为算法正常执行
*软连接3-1焊前定位
* 三协的机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_3_PreWeldMeasurement(HObject ho_Image, HTuple hv_Pix, HTuple* hv_Distances,
HTuple* hv_Out_line, HTuple* hv_Make);
/*
* ho_Image :输入图片
* hv_Pix :相机像素精度
* hv_Out_distance :间距测量值1个值
* hv_Out_line :输出测量线段的端点坐标(判断长度)
* hv_Makes:输出-1为算法错误,输出1为算法正常执行
* 三协3-3机台,马甲检测
*/
extern "C" __declspec(dllexport) void _stdcall _628_3_FrontVest(HObject ho_Image, HTuple hv_Pix, HTuple* hv_Out_distance,
HTuple* hv_Make, HTuple* hv_Out_Line);
/*
* ho_Image :输入图片
* hv_Pix :相机像素精度
* hv_Out_distance :间距测量值1个值
* hv_Out_line :输出测量线段的端点坐标(判断长度)
* hv_Makes:输出-1为算法错误,输出1为算法正常执行
* 三协3-3机台,马甲检测
*/
extern "C" __declspec(dllexport) void _stdcall _628_3_BackVest(HObject ho_Image, HTuple hv_Pix, HTuple* hv_Out_distance, HTuple* hv_Make,
HTuple* hv_Out_Line);
@@ -157,17 +262,17 @@ extern "C" __declspec(dllexport) void _stdcall _628_AfterWelding_Distance_T(HObj
/*
* ho_Image:输入图片(原图)
* hv_model:赋值为1时是基准标定模式,0为正常检测模式
* hv_BenchmarkFile:基准标定文件的路径
* hv_NinePointDocument:九点文件的路径
*hv_CameraNumber:上钉相机编号
* hv_out_Cirle:输出放钉孔的圆心x,圆心y,半径。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行,输出为2为基准标定成功
* hv_offset_x:x轴方向上相对于基准位置的偏差
* hv_offset_y:y轴方向上相对于基准位置的偏差
* 上钉引导函数
* 赢合的机台
* ho_Image:输入图片(原图)
* hv_model:赋值为1时是基准标定模式,0为正常检测模式
* hv_BenchmarkFile:基准标定文件的路径
* hv_NinePointDocument:九点文件的路径
*hv_CameraNumber:上钉相机编号
* hv_out_Cirle:输出放钉孔的圆心x,圆心y,半径。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行,输出为2为基准标定成功
* hv_offset_x:x轴方向上相对于基准位置的偏差
* hv_offset_y:y轴方向上相对于基准位置的偏差
* 上钉引导函数
* 赢合的机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_SealingNails(HObject ho_Image, HTuple hv_model, HTuple hv_BenchmarkFile,
@@ -175,60 +280,133 @@ extern "C" __declspec(dllexport) void _stdcall _628_SealingNails(HObject ho_Ima
HTuple* hv_offset_x, HTuple* hv_offset_y);
/*
* ho_Image:输入图片(原图)
* hv_model:赋值为1时是基准标定模式,0为正常检测模式
* hv_BenchmarkFile:基准标定文件的路径
* hv_NinePointDocument:九点文件的路径
*hv_CameraNumber:预焊相机编号
* hv_out_Cirle:输出放钉孔的圆心x,圆心y,半径。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行,输出为2为基准标定成功
* hv_offset_x:x轴方向上相对于基准位置的偏差
* hv_offset_y:y轴方向上相对于基准位置的偏差
* hv_Text:输出报警信息包括(ok,无钉,翘钉,反钉)
* 赢合机台
* 预焊函数
* ho_Image:输入图片(原图)
* hv_model:赋值为1时是基准标定模式,0为正常检测模式
* hv_BenchmarkFile:基准标定文件的路径
* hv_NinePointDocument:九点文件的路径
*hv_CameraNumber:预焊相机编号
* hv_out_Cirle:输出放钉孔的圆心x,圆心y,半径。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行,输出为2为基准标定成功
* hv_offset_x:x轴方向上相对于基准位置的偏差
* hv_offset_y:y轴方向上相对于基准位置的偏差
* hv_Text:输出报警信息包括(ok,无钉,翘钉,反钉)
* 赢合机台
* 预焊函数
*/
extern "C" __declspec(dllexport) void _stdcall _628_yuhan(HObject ho_Image, HTuple hv_Model, HTuple hv_BenchmarkFile, HTuple hv_NinePointDocument,
HTuple hv_CameraNumber, HTuple* hv_out_Cirle, HTuple* hv_Make, HTuple* hv_offset_x,
HTuple* hv_offset_y, HTuple* hv_Text);
/*
* ho_Image:输入图片(原图)
* hv_model:赋值为1时是基准标定模式,0为正常检测模式
* hv_BenchmarkFile:基准标定文件的路径
* hv_NinePointDocument:九点文件的路径
*hv_CameraNumber:预焊相机编号
* hv_out_Cirle:输出放钉孔的圆心x,圆心y,半径。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行,输出为2为基准标定成功
* hv_offset_x:x轴方向上相对于基准位置的偏差
* hv_offset_y:y轴方向上相对于基准位置的偏差
* 终焊函数
* 赢合的机台
* ho_Image:输入图片(原图)
* hv_model:赋值为1时是基准标定模式,0为正常检测模式
* hv_BenchmarkFile:基准标定文件的路径
* hv_NinePointDocument:九点文件的路径
*hv_CameraNumber:预焊相机编号
* hv_out_Cirle:输出放钉孔的圆心x,圆心y,半径。数组形式
* hv_Make:输出-1为算法错误,输出1为算法正常执行,输出为2为基准标定成功
* hv_offset_x:x轴方向上相对于基准位置的偏差
* hv_offset_y:y轴方向上相对于基准位置的偏差
* 终焊函数
* 赢合的机台
*/
extern "C" __declspec(dllexport) void _stdcall _628_FinalWelding(HObject ho_Image, HTuple hv_model, HTuple hv_BenchmarkFile,
HTuple hv_NinePointDocument, HTuple hv_CameraNumber, HTuple* hv_out_Cirle, HTuple* hv_Make,
HTuple* hv_offset_x, HTuple* hv_offset_y);
/*
* ho_Image1:输入图片(原图)
* ho_Image2:输入图片(原图)
* ho_Image3:输入图片(原图)
* ho_Image4:输入图片(原图)
*ho_Out_Image1:输出图片1
* ho_Out_image2:输出图片2
* hv_Make:输出-1为算法错误,输出1为算法正常执行,输出为2为基准标定成功
* hv_sacats:光源与光轴夹角
* hv_Tilts:光源安装位置
* ho_Image1:输入图片(原图)
* ho_Image2:输入图片(原图)
* ho_Image3:输入图片(原图)
* ho_Image4:输入图片(原图)
*ho_Out_Image1:输出图片1
* ho_Out_image2:输出图片2
* hv_Make:输出-1为算法错误,输出1为算法正常执行,输出为2为基准标定成功
* hv_sacats:光源与光轴夹角
* hv_Tilts:光源安装位置
*/
extern "C" __declspec(dllexport) void _stdcall _628_25D(HObject ho_Image1, HObject ho_Image2, HObject ho_Image3, HObject ho_Image4,
HObject* ho_Out_Image1, HObject* ho_Out_image2, HTuple hv_sacats, HTuple hv_Tilts,
HTuple* hv_Make);
//Function Name: Cal_Defect_Height
//Author:
//Description: 2D获取缺陷后, 基于特征点的位置关系, 建立2D和3D的映射关系.
//Input: in_Image2: 密封钉区域的2D二值化的图像(bmp),,
// in_Image3: 3D深度图像(tiff),
// in_xResolution: x向精度(mm/pix)
// in_yResolution: y向精度(mm/pix),
// in_zResolution: Z向精度(mm/pix)
// in_DefectLocation: 2d图像缺陷坐标点位置, 每四个一组,
// in_DefectLocation[0]:缺陷外接矩形的X向坐标(pix)
// in_DefectLocation[1]:缺陷外接矩形的y向坐标(pix)
// in_DefectLocation[2]:缺陷外接矩形的宽度width(pix)
// in_DefectLocation[3]:缺陷外接矩形的高度height(pix)
// in_FilePath, 矩阵martix文件路径,
// in_offsetValue, 位置补偿值,
// in_offsetValue[0]: 左工位X向补偿值(pix)
// in_offsetValue[1]: 左工位Y向补偿值(pix)
// in_offsetValue[2]: 右工位X向补偿值(pix)
// in_offsetValue[3]: 右工位Y向补偿值(pix)
// in_HoffsetValue, 缺陷高度补偿值(正值,单位:mm)
//output: out_Height: 缺陷的高度(mm),
// out_Flag: 算法执行的标志位, 0: 算法执行异常 1:算法执行ok
// 赢合机台
//verion change log: XXX 2024-10-22 V1.1 Create new function
extern "C" __declspec(dllexport) void _stdcall Cal_Defect_Height(HObject ho_in_Image2, HObject ho_in_Image3, HTuple hv_in_xResolution,
HTuple hv_in_yResolution, HTuple hv_in_zResolution, HTuple hv_in_DefectLocation,
HTuple hv_in_FilePath, HTuple hv_in_OffsetValue, HTuple hv_in_HoffsetValue, HTuple* hv_out_Height,
HTuple* hv_out_Angle, HTuple* hv_out_Flag);
//**********************************************************************
//Function Name: Cal_Long_Coatingcover_Dist_Left
//Author:
//Description: 计算膜到端盖的距离,
//Input(HObject): in_Image,滤波处理后的抓边图像
//Input(HTuple): in_Resolution, 相机精度(mm/pix)
//output(HTuple): out_Maxdistance, 膜到端盖的最大距离(mm)
// out_Mindistance, 膜到端盖的最小距离(mm)
// out_Line, 基准线位置(x1,y1,x2,y2)
// out_X, 膜的x点坐标集
// out_Y, 膜的y点坐标集
// out_Flag: 执行成功位标识 1, 算法执行成功 2, 算法执行ng
// out_NgTails: NG的明细
//verion change log: 胡汉兵 2024-07-11 V1.1 Create new function .
//**********************************************************************
extern "C" __declspec(dllexport) void _stdcall Cal_Long_Coatingcover_Dist_Left(HObject ho_in_Image, HTuple hv_in_Resolution,
HTuple* hv_out_Maxdistance, HTuple* hv_out_Mindistance, HTuple* hv_out_Line,
HTuple* hv_out_X, HTuple* hv_out_Y, HTuple* hv_out_Flag, HTuple* hv_out_Ngtails);
//**********************************************************************
//Function Name: Cal_Long_Coatingcover_Dist_Right
//Author:
//Description: 计算膜到端盖的距离,
//Input(HObject): in_Image,滤波处理后的抓边图像
//Input(HTuple): in_Resolution, 相机精度(mm/pix)
//output(HTuple): out_Maxdistance, 膜到端盖的最大距离(mm)
// out_Mindistance, 膜到端盖的最小距离(mm)
// out_Line, 基准线位置(x1,y1,x2,y2)
// out_X, 膜的x点坐标集
// out_Y, 膜的y点坐标集
// out_Flag: 执行成功位标识 1, 算法执行成功 2, 算法执行ng
// out_NgTails: NG的明细
//verion change log: 胡汉兵 2024-10-26 V1.1 Create new function .
//**********************************************************************
extern "C" __declspec(dllexport) void _stdcall Cal_Long_Coatingcover_Dist_Right(HObject ho_in_Image, HTuple hv_in_Resolution,
HTuple* hv_out_Maxdistance, HTuple* hv_out_Mindistance, HTuple* hv_out_Line,
HTuple* hv_out_X, HTuple* hv_out_Y, HTuple* hv_out_Flag, HTuple* hv_out_Ngtails);
#endif
#if 1 halcon调用函数
#if 1 halcon调用函数
void gen_arrow_contour_xld(HObject* ho_Arrow, HTuple hv_Row1, HTuple hv_Column1,
HTuple hv_Row2, HTuple hv_Column2, HTuple hv_HeadLength, HTuple hv_HeadWidth);
@@ -263,6 +441,32 @@ void BeforeWelding_L(HObject ho_Image_L, HTuple hv_Pix_T, HTuple* hv_Make, HTupl
void BeforeWelding_T(HObject ho_Image_T, HTuple hv_Pix_T, HTuple* hv_Make, HTuple* hv_Out_Line,
HTuple* hv_Out_Vale, HTuple* hv_Out_PointRow, HTuple* hv_Out_PointCol);
void Get_CentreLine(HObject ho_Line1, HObject ho_Line2, HObject ho_Image, HTuple hv_Line1_EndPoint,
HTuple hv_Line2_EndPoint, HTuple* hv_Out_Rows, HTuple* hv_Out_Cols, HTuple* hv_Make);
void Cal_PointCould_HeightValue(HObject ho_Tmp_Region, HObject ho_Zero_Region, HObject ho_XImageScaled,
HObject ho_YImageScaled, HObject ho_ZImageScaled, HTuple hv_HeightPointPerenct,
HTuple* hv_Out_Mean, HTuple* hv_Out_Max, HTuple* hv_Out_Min, HTuple* hv_Out_Height,
HTuple* hv_Out_Flag, HTuple* hv_Out_NgTails);
void cs_628_PoleDetection(HObject ho_Image, HTuple hv_Pix, HTuple* hv_Distances,
HTuple* hv_UP_Down_Point, HTuple* hv_life_Ren_Point, HTuple* hv_Point, HTuple* hv_Chamfering,
HTuple* hv_Make);
void Get_Rectangle2_Corner(HObject ho_Rectangle, HTuple* hv_out_Row, HTuple* hv_out_Col);
void Get_LineParameters(HObject ho_in_Image, HObject* ho_out_Contour, HTuple hv_in_Parameters,
HTuple* hv_out_Parameters, HTuple* hv_out_Flag, HTuple* hv_out_NgTails);
void rake1(HObject ho_Image, HObject * ho_Regions, HTuple hv_InParameters, HTuple * hv_ResultRow,
HTuple * hv_ResultColumn);
void Get_CircleParameters(HObject ho_in_Image, HObject* ho_out_Contour, HTuple hv_in_Parameters,
HTuple* hv_out_Flag, HTuple* hv_out_NgTails, HTuple* hv_out_Parameters);
#endif
Binary file not shown.