Проблемы с gpu :: resize

Я пытаюсь вычислить функции HOG на графическом процессоре для разных уровней, а затем сохраняю функции каждого уровня в файл yml. Ниже приведена функция, которую я использую.

void App::run()
{
unsigned int count = 0;
FileStorage fs;
running = true;

int width = 640;
int height = 480;

Size win_size(args.win_width, args.win_width * 2);
Size win_stride(args.win_stride_width, args.win_stride_height);

cv::gpu::HOGDescriptor gpu_hog(win_size, Size(16, 16), Size(8, 8), Size(8, 8), 9,
cv::gpu::HOGDescriptor::DEFAULT_WIN_SIGMA, 0.2, gamma_corr,
cv::gpu::HOGDescriptor::DEFAULT_NLEVELS);

VideoCapture vc("/home/ubuntu/Desktop/getdescriptor/images/image%d.jpg");
Mat frame;
Mat Left;
Mat img_aux, img, img_to_show, img_new;
cv::Mat temp;
gpu::GpuMat gpu_img, descriptors, new_img;

char cbuff[20];while (running)
{

vc.read(frame);

if (!frame.empty())
{
workBegin();

sprintf (cbuff, "%04d", count);

// Change format of the image
if (make_gray) cvtColor(frame, img_aux, CV_BGR2GRAY);
else if (use_gpu) cvtColor(frame, img_aux, CV_BGR2BGRA);
else Left.copyTo(img_aux);

// Resize image
if (args.resize_src) resize(img_aux, img, Size(args.width, args.height));
else img = img_aux;
img_to_show = img;

gpu_hog.nlevels = nlevels;

hogWorkBegin();
if (use_gpu)
{
gpu_img.upload(img);
new_img.upload(img_new);
fs.open(cbuff, FileStorage::WRITE);

//double scale = 1.05;
for(int levels = 0; levels < nlevels; levels++)
{
gpu_hog.getDescriptors(gpu_img, win_stride, descriptors, cv::gpu::HOGDescriptor::DESCR_FORMAT_ROW_BY_ROW);
descriptors.download(temp);

printf("size %d %d\n", temp.rows, temp.cols);

fs <<"level" << levels;
fs << "features" << temp;

cout<<"("<<width<<","<<height<<")"<<endl;

width =  round(width/scale);
height = round(height/scale);

cout<<"Levels "<<levels<<endl;

if(width < win_size.width || height < win_size.height)
break;

resize(img,img_new,Size(width,height));
scale *= scale;
}

cout<<count<<endl;
count++;
}

hogWorkEnd();
fs.release();
}
else  running = false;
}
}

Для первого изображения он правильно рассчитывает характеристики HOG для всех уровней, но для следующего изображения он принимает старое значение ширины и высоты, и в этом случае он прерывает следующий цикл.

if(width < win_size.width || height < win_size.height)
break;

Может кто-нибудь указать мою ошибку. Я пытался отладить, но, к сожалению, пока безуспешно.

-1

Решение

Функция расчета HOG каждого изображения принимает старое значение следующих трех параметров.
1. Ширина
2. Высота
3. Масштаб

И когда он вычисляет особенности HOG для следующего изображения, он немедленно прерывает цикл. Распространенная ошибка программирования.

0

Другие решения


По вопросам рекламы [email protected]