Я использую VS2012 C++/CLI на 64-разрядной машине Win 8.1 с OpenCV 3.0.Ошибка OpenGV GPU SURF ROI?
Я пытаюсь реализовать версию графического процессора SURF.
Когда я не указываю ROI, у меня нет проблем. Таким образом, следующая строка не дает никаких проблем и определяет ключевые точки в полном изображении:
surf(*dImages->d_gpuGrayFrame,cuda::GpuMat(),Images->SurfKeypoints);
Однако попытка указать ROI вызвать сбой. Например, я указываю ROI по верхним, левым и нижним, правым координатам (которые, как я знаю, работают в коде, отличном от GPU). В коде GPU следующее приводит к сбою, если ROI меньше, чем исходное изображение (без сбоев, если ROI имеет тот же размер, что и исходное изображение).
int theight = (Images->LoadFrameClone.rows-Images->CropBottom) - Images->CropTop ;
int twidth = (Images->LoadFrameClone.cols-Images->CropRight)-Images->CropLeft ;
Rect tRect = Rect(Images->CropLeft,Images->CropTop,twidth,theight);
cuda::GpuMat tmask = cuda::GpuMat(*dImages->d_gpuGrayFrame,tRect);
surf(*dImages->d_gpuGrayFrame,tmask,Images->SurfKeypoints); // fails on this line
Я знаю, что tmask не имеет нулевого размера и что основное изображение является правильным. Насколько я могу судить, единственной проблемой является определение ROI в вызове SURF GPU. Кто-нибудь ведет к тому, почему это может произойти?
Благодаря
Вы печатали tWidth и tHeight? Возможно, Rect не создает правовой ROI (например, область урожая слишком большая)? вы пробовали за очень небольшие размеры посевов? – Micka
tWidth и tHeight были напечатаны динамически, и я вижу, что они правильного размера. Когда tWidth и tHeight имеют тот же размер, что и базовое изображение (т. Е. 1920 x 1080), тогда он работает. Как только tWidth и tHight указаны как меньшие (то есть фактический ROI), тогда он сработает. Я не пробовал действительно небольшие небольшие ROI. Что это будет? – user1805103
ROI и маски - это разные вещи. На самом деле, по-моему, маска должна быть вашей рентабельностью. Можете ли вы попытаться создать 8-битное одноканальное изображение (без ROI), где вы нарисуете заполненную прямоугольную область tRect и используете ее как маску? – Micka