fix match_template and haar

pull/1779/head
perping 12 years ago
parent d6e0ef2710
commit 1e2fb6de30
  1. 6
      modules/ocl/src/haar.cpp
  2. 20
      modules/ocl/src/match_template.cpp

@ -800,7 +800,7 @@ CvSeq *cv::ocl::OclCascadeClassifier::oclHaarDetectObjects( oclMat &gimg, CvMemS
indexy += sz.height; indexy += sz.height;
} }
if(Context::getContext()->supportsFeature(FEATURE_CL_DOUBLE)) if(gsqsum_t.depth() == CV_64F)
gsqsum_t.convertTo(gsqsum, CV_32FC1); gsqsum_t.convertTo(gsqsum, CV_32FC1);
else else
gsqsum = gsqsum_t; gsqsum = gsqsum_t;
@ -1294,7 +1294,7 @@ void cv::ocl::OclCascadeClassifierBuf::detectMultiScale(oclMat &gimg, CV_OUT std
cv::ocl::integral(resizeroi, gimgroi, gimgroisq); cv::ocl::integral(resizeroi, gimgroi, gimgroisq);
indexy += sz.height; indexy += sz.height;
} }
if(Context::getContext()->supportsFeature(FEATURE_CL_DOUBLE)) if(gsqsum_t.depth() == CV_64F)
gsqsum_t.convertTo(gsqsum, CV_32FC1); gsqsum_t.convertTo(gsqsum, CV_32FC1);
else else
gsqsum = gsqsum_t; gsqsum = gsqsum_t;
@ -1360,7 +1360,7 @@ void cv::ocl::OclCascadeClassifierBuf::detectMultiScale(oclMat &gimg, CV_OUT std
else else
{ {
cv::ocl::integral(gimg, gsum, gsqsum_t); cv::ocl::integral(gimg, gsum, gsqsum_t);
if(Context::getContext()->supportsFeature(FEATURE_CL_DOUBLE)) if(gsqsum_t.depth() == CV_64F)
gsqsum_t.convertTo(gsqsum, CV_32FC1); gsqsum_t.convertTo(gsqsum, CV_32FC1);
else else
gsqsum = gsqsum_t; gsqsum = gsqsum_t;

@ -250,7 +250,10 @@ namespace cv
buf.image_sums.resize(1); buf.image_sums.resize(1);
buf.image_sqsums.resize(1); buf.image_sqsums.resize(1);
integral(image.reshape(1), buf.image_sums[0], temp); integral(image.reshape(1), buf.image_sums[0], temp);
temp.convertTo(buf.image_sqsums[0], CV_32FC1); if(temp.depth() == CV_64F)
temp.convertTo(buf.image_sqsums[0], CV_32FC1);
else
buf.image_sqsums[0] = temp;
unsigned long long templ_sqsum = (unsigned long long)sqrSum(templ.reshape(1))[0]; unsigned long long templ_sqsum = (unsigned long long)sqrSum(templ.reshape(1))[0];
Context *clCxt = image.clCxt; Context *clCxt = image.clCxt;
@ -416,7 +419,12 @@ namespace cv
{ {
buf.image_sums.resize(1); buf.image_sums.resize(1);
buf.image_sqsums.resize(1); buf.image_sqsums.resize(1);
integral(image, buf.image_sums[0], buf.image_sqsums[0]); cv::ocl::oclMat temp;
integral(image, buf.image_sums[0], temp);
if(temp.depth() == CV_64F)
temp.convertTo(buf.image_sqsums[0], CV_32FC1);
else
buf.image_sqsums[0] = temp;
templ_sum[0] = (float)sum(templ)[0]; templ_sum[0] = (float)sum(templ)[0];
@ -452,10 +460,14 @@ namespace cv
templ_sum *= scale; templ_sum *= scale;
buf.image_sums.resize(buf.images.size()); buf.image_sums.resize(buf.images.size());
buf.image_sqsums.resize(buf.images.size()); buf.image_sqsums.resize(buf.images.size());
cv::ocl::oclMat temp;
for(int i = 0; i < image.oclchannels(); i ++) for(int i = 0; i < image.oclchannels(); i ++)
{ {
integral(buf.images[i], buf.image_sums[i], buf.image_sqsums[i]); integral(buf.images[i], buf.image_sums[i], temp);
if(temp.depth() == CV_64F)
temp.convertTo(buf.image_sqsums[i], CV_32FC1);
else
buf.image_sqsums[i] = temp;
} }
switch(image.oclchannels()) switch(image.oclchannels())

Loading…
Cancel
Save