@ -442,7 +442,6 @@ int ImgCheckAnalysisy::CheckRun()
cv : : RotatedRect inner_roi ;
// 模型定位内外边缘
int reedge = AI_Edge ( m_CheckResult_shareP - > in_shareImage - > img , outer_roi , inner_roi ) ;
m_outer_roi = outer_roi . boundingRect ( ) ;
if ( reedge ! = 0 )
{
m_pdetlog - > AddCheckstr ( PrintLevel_0 , " Error " , " AI_Edge is error type = %d " , reedge ) ;
@ -462,7 +461,7 @@ int ImgCheckAnalysisy::CheckRun()
/*投影对齐模板*/
Adapt_Config ( m_tplOuterRect , outer_roi , m_CheckResult_shareP - > in_shareImage - > img ) ;
m_outer_roi = m_tplOuterRect . boundingRect ( ) ;
m_Crop_Roi_paramImg = m_outer_roi ;
m_pImageAllResult - > pDetResult - > CutRoi = m_outer_roi ;
m_pImageAllResult - > pDetResult - > Param_CropRoi = m_Crop_Roi_paramImg ;
@ -488,7 +487,7 @@ int ImgCheckAnalysisy::CheckRun()
ImgPreDet ( ) ;
/*更新检测区域*/
Update_DetRoiList ( ) ;
// Update_DetRoiList();
m_pdetlog - > AddCheckstr ( PrintLevel_0 , " 3、pre detect " , " -------------------------pre Det--------------- \n " ) ;
@ -1682,43 +1681,6 @@ int ImgCheckAnalysisy::DrawResult_Step_1()
float fs_resize_x = m_pImageAllResult - > resultImg . cols * 1.0f / m_pImageAllResult - > detImg . cols ;
float fs_resize_y = m_pImageAllResult - > resultImg . rows * 1.0f / m_pImageAllResult - > detImg . rows ;
// 要绘制结果
if ( m_pbaseCheckFunction & & m_pbaseCheckFunction - > edgeDet . bDrawResult )
{
for ( const auto & r : m_Edge_DetConfig . pin_det_roi )
{
cv : : Rect droi ;
droi . x = r . roi . x * fs_resize_x ;
droi . y = r . roi . y * fs_resize_y ;
droi . width = r . roi . width * fs_resize_x ;
droi . height = r . roi . height * fs_resize_y ;
cv : : rectangle ( m_CheckResult_shareP - > resultimg , droi , cv : : Scalar ( 255 , 0 , 255 ) , 1 ) ; // 黄色角点
}
if ( m_Edge_DetConfig . Det_region . size ( ) > 2 )
{
for ( int i = 0 ; i < m_Edge_DetConfig . Det_region . size ( ) - 1 ; i + + )
{
cv : : Point p1 ;
p1 . x = m_Edge_DetConfig . Det_region [ i ] . x * fs_resize_x ;
p1 . y = m_Edge_DetConfig . Det_region [ i ] . y * fs_resize_y ;
cv : : Point p2 ;
p2 . x = m_Edge_DetConfig . Det_region [ i + 1 ] . x * fs_resize_x ;
p2 . y = m_Edge_DetConfig . Det_region [ i + 1 ] . y * fs_resize_y ;
cv : : line ( m_CheckResult_shareP - > resultimg , p1 , p2 , cv : : Scalar ( 0 , 255 , 255 ) ) ;
}
{
cv : : Point p1 ;
p1 . x = m_Edge_DetConfig . Det_region [ 0 ] . x * fs_resize_x ;
p1 . y = m_Edge_DetConfig . Det_region [ 0 ] . y * fs_resize_y ;
cv : : Point p2 ;
p2 . x = m_Edge_DetConfig . Det_region [ m_Edge_DetConfig . Det_region . size ( ) - 1 ] . x * fs_resize_x ;
p2 . y = m_Edge_DetConfig . Det_region [ m_Edge_DetConfig . Det_region . size ( ) - 1 ] . y * fs_resize_y ;
cv : : line ( m_CheckResult_shareP - > resultimg , p1 , p2 , cv : : Scalar ( 0 , 255 , 255 ) ) ;
}
}
}
if ( m_pbaseCheckFunction & & m_pbaseCheckFunction - > markLine . region . size ( ) > 1 )
{
std : : vector < cv : : Point > product_roi_show ;
@ -1828,77 +1790,39 @@ int ImgCheckAnalysisy::Pin_Qx_Det(const cv::Mat &img)
m_Edge_DetConfig . bSaveResultImg = true ;
}
// m_pbaseCheckFunction->print("Pin_Qx_Det");
int re = m_Pin_QX_Det . Detect ( img , & m_Edge_DetConfig ) ;
if ( re = = 0 )
{
for ( const auto r : m_Edge_DetConfig . qx_result )
Mat pin_mask ;
int re = m_Pin_QX_Det . GetPinMask ( img , & m_Edge_DetConfig , pin_mask ) ;
// 统计tplPinMask的blob边缘点, 并绘制到tplImg上
vector < vector < Point > > pin_contours ;
vector < Vec4i > hierarchy ;
cv : : findContours ( pin_mask , pin_contours , hierarchy , cv : : RETR_EXTERNAL , cv : : CHAIN_APPROX_NONE ) ;
//缩放比例
const float pin_scale_x = ( pin_mask . cols > 0 ) ? static_cast < float > ( img . cols ) / pin_mask . cols : 0.0f ;
const float pin_scale_y = ( pin_mask . rows > 0 ) ? static_cast < float > ( img . rows ) / pin_mask . rows : 0.0f ;
// 将轮廓点从 mask 坐标系 映射回 tplImg 坐标系
m_curPinContours . reserve ( pin_contours . size ( ) ) ;
for ( size_t i = 0 ; i < pin_contours . size ( ) ; i + + )
{
std : : vector < cv : : Point > mapped ;
mapped . reserve ( pin_contours [ i ] . size ( ) ) ;
for ( const auto & pt : pin_contours [ i ] )
{
QX_ERROR_INFO_ temerror ;
temerror . roi = r . roi_src ;
temerror . Idx = m_pDetResult - > pQx_ErrorList - > size ( ) ;
temerror . area = r . area_pixel ;
temerror . JudgArea = r . area_pixel * m_fImgage_Scale_X * m_fImgage_Scale_Y ;
temerror . JudgArea_second = temerror . JudgArea ;
temerror . energy = 99999999 ;
temerror . flen = std : : max ( r . roi_src . width , r . roi_src . height ) ;
temerror . fbreadth = std : : min ( r . roi_src . width , r . roi_src . height ) ;
temerror . nconfig_qx_type = CONFIG_QX_NAME_cell_edge ;
temerror . qx_name = CONFIG_QX_NAME_Names [ CONFIG_QX_NAME_cell_edge ] ;
temerror . maxValue = 0 ;
temerror . grayDis = 255 ;
temerror . density = 0 ;
temerror . fUpIou = 0 ;
{
cv : : Point pCenter ;
pCenter . x = temerror . roi . x + temerror . roi . width * 0.5 ;
pCenter . y = temerror . roi . y + temerror . roi . height * 0.5 ;
int nmaxregionIdx = 0 ;
for ( int iregion = 0 ; iregion < m_DetRoiList . roiList_Src . size ( ) ; iregion + + )
{
const std : : vector < cv : : Point > & polygon = m_DetRoiList . roiList_Src [ iregion ] ;
double result = cv : : pointPolygonTest ( polygon , pCenter , false ) ;
if ( result < 0 )
{
continue ;
}
nmaxregionIdx = iregion ;
}
temerror . detRegionidxList . push_back ( nmaxregionIdx ) ;
}
// {
// cv::Point pCenter;
// pCenter.x = temerror.roi.x + temerror.roi.width * 0.5;
// pCenter.y = temerror.roi.y + temerror.roi.height * 0.5;
// int nmaxregionIdx = 0;
// for (int iregion = 0; iregion < m_DetRoiList.roiList_Src.size(); iregion++)
// {
// const std::vector<cv::Point> &polygon = m_DetRoiList.roiList_Src[iregion];
// double result = cv::pointPolygonTest(polygon, pCenter, false);
// if (result < 0)
// {
// continue;
// }
// temerror.detRegionidxList.push_back(iregion);
// }
// if (temerror.detRegionidxList.size() <= 0)
// {
// temerror.detRegionidxList.push_back(0);
// }
// }
m_pDetResult - > pQx_ErrorList - > push_back ( temerror ) ;
mapped . emplace_back ( cvRound ( pt . x * pin_scale_x ) ,
cvRound ( pt . y * pin_scale_y ) ) ;
}
m_pdetlog - > AddCheckstr ( PrintLevel_1 , " Pin_Qx_Det " , " succ qx num %ld " , m_Edge_DetConfig . qx_result . size ( ) ) ;
// printf("- %s idx %d a %f v %d h %f l %f\n", DetImgInfo_shareP->strChannel.c_str(), i, JudgArea, blobs.blobTab[i].maxValue, blobs.blobTab[i].grayDis, flen);
}
else
{
m_pdetlog - > AddCheckstr ( PrintLevel_1 , " Pin_Qx_Det " , " error %d " , re ) ;
}
m_curPinContours . push_back ( mapped ) ;
}
// if (m_Edge_DetConfig.bSaveResultImg)
{
Mat showimg ;
cv : : cvtColor ( img , showimg , cv : : COLOR_GRAY2BGR ) ;
cv : : drawContours ( showimg , m_curPinContours , - 1 , cv : : Scalar ( 0 , 0 , 255 ) , 1 ) ;
cv : : drawContours ( showimg , m_tplPinContours , - 1 , cv : : Scalar ( 0 , 255 , 0 ) , 1 ) ;
imwrite ( " pin_contours.png " , showimg ) ;
}
return 0 ;
}