diff --git a/modules/ocl/src/haar.cpp b/modules/ocl/src/haar.cpp index 95b934750..31f674281 100644 --- a/modules/ocl/src/haar.cpp +++ b/modules/ocl/src/haar.cpp @@ -1059,11 +1059,11 @@ CvSeq *cv::ocl::OclCascadeClassifier::oclHaarDetectObjects( oclMat &gimg, CvMemS { sz = sizev[i]; factor = scalev[i]; - int ystep = cvRound(std::max(2., factor)); - int equRect_x = (int)(factor * gcascade->p0 + 0.5); - int equRect_y = (int)(factor * gcascade->p1 + 0.5); - int equRect_w = (int)(factor * gcascade->p3 + 0.5); - int equRect_h = (int)(factor * gcascade->p2 + 0.5); + double ystep = std::max(2., factor); + int equRect_x = cvRound(factor * gcascade->p0); + int equRect_y = cvRound(factor * gcascade->p1); + int equRect_w = cvRound(factor * gcascade->p3); + int equRect_h = cvRound(factor * gcascade->p2); p[i].s[0] = equRect_x; p[i].s[1] = equRect_y; p[i].s[2] = equRect_x + equRect_w; diff --git a/modules/ocl/src/opencl/haarobjectdetect.cl b/modules/ocl/src/opencl/haarobjectdetect.cl index e74256f52..bafd47472 100644 --- a/modules/ocl/src/opencl/haarobjectdetect.cl +++ b/modules/ocl/src/opencl/haarobjectdetect.cl @@ -426,7 +426,6 @@ __kernel void __attribute__((reqd_work_group_size(8,8,1)))gpuRunHaarClassifierCa { if(result && lclidx %2 ==0 && lclidy %2 ==0 ) { - int queueindex = atomic_inc(lclcount); lcloutindex[queueindex<<1] = (lclidy << 16) | lclidx; lcloutindex[(queueindex<<1)+1] = as_int((float)variance_norm_factor); @@ -436,7 +435,6 @@ __kernel void __attribute__((reqd_work_group_size(8,8,1)))gpuRunHaarClassifierCa { if(result) { - int queueindex = atomic_inc(lclcount); lcloutindex[queueindex<<1] = (lclidy << 16) | lclidx; lcloutindex[(queueindex<<1)+1] = as_int((float)variance_norm_factor); @@ -563,20 +561,20 @@ __kernel void __attribute__((reqd_work_group_size(8,8,1)))gpuRunHaarClassifierCa int y = mad24(grpidy,grpszy,((temp & (int)0xffff0000) >> 16)); temp = glboutindex[0]; int4 candidate_result; - candidate_result.zw = (int2)convert_int_rtn(round(factor*20.f)); - candidate_result.x = convert_int_rtn(round(x*factor)); - candidate_result.y = convert_int_rtn(round(y*factor)); + candidate_result.zw = (int2)convert_int_rte(factor*20.f); + candidate_result.x = convert_int_rte(x*factor); + candidate_result.y = convert_int_rte(y*factor); atomic_inc(glboutindex); int i = outputoff+temp+lcl_id; if(candidate[i].z == 0) - { + { candidate[i] = candidate_result; } else - { + { for(i=i+1;;i++) - { + { if(candidate[i].z == 0) { candidate[i] = candidate_result; diff --git a/modules/ocl/src/opencl/haarobjectdetect_scaled2.cl b/modules/ocl/src/opencl/haarobjectdetect_scaled2.cl index 9597dfe00..a8faaf842 100644 --- a/modules/ocl/src/opencl/haarobjectdetect_scaled2.cl +++ b/modules/ocl/src/opencl/haarobjectdetect_scaled2.cl @@ -259,19 +259,19 @@ __kernel void gpuRunHaarClassifierCascade_scaled2( int y = (temp & (int)0xffff0000) >> 16; temp = atomic_inc(glboutindex); int4 candidate_result; - candidate_result.zw = (int2)convert_int_rtn(round(factor * 20.f)); + candidate_result.zw = (int2)convert_int_rte(factor * 20.f); candidate_result.x = x; candidate_result.y = y; int i = outputoff+temp+lcl_id; if(candidate[i].z == 0) - { + { candidate[i] = candidate_result; } else - { + { for(i=i+1;;i++) - { + { if(candidate[i].z == 0) { candidate[i] = candidate_result;