Ошибка: обнаружение функции OpenCV 3.4.0 CUDA ORB - PullRequest
0 голосов
/ 10 января 2019

Я использую ORB-детектор для определения ключевых точек кадра видео, но он дает мне следующую ошибку:

OpenCV Error: Assertion failed (img.type() == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3))) in detectAsync

Функции процессора для детектора ORB работают нормально. Но как-то для GPU он не способен определять ключевые точки изображения. Я также пытался использовать FastFeatureDetector из CUDA, но он также не работает.

Я прилагаю свой код ниже:

int main()
{
   cv::VideoCapture input("/home/admin/Pictures/cars.mp4");

   // Create image matrix
   cv::Mat img,desc;
   cv::cuda::GpuMat obj1;

   // create vector keypoints
   std::vector<cv::KeyPoint>keypoints;

   // create keypoint detector
   cv::Ptr<cv::cuda::ORB> detector = cv::cuda::ORB::create();

   for(;;)
   {
       if(!input.read(img))
           break;
       obj1.upload(img);
       detector->detect(obj1,keypoints, cv::cuda::GpuMat());
       obj1.download(desc);
       //Create cricle at keypoints
       for(size_t i=0; i<keypoints.size(); i++)
          cv::circle(desc, keypoints[i].pt, 2,cv::Scalar(0,0,255),1);

       // Display Image
       cv::imshow("img", desc);
       char c = cv::waitKey();

       // NOTE: Press any key to run the next frame
       // Wait for a key to press
       if(c == 27) // 27 is ESC key code
           break;
    }
}

Основная проблема заключается в том, что детектор принимает CV_8UC1 в качестве входного формата для Mat. Но формат моего изображения - CV_8UC3. Я попытался преобразовать это изображение, используя img.convertTo(img1, CV_8UC1), но он все еще не может обработать и выдает ошибку OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat.

1 Ответ

0 голосов
/ 16 января 2019

Вы должны преобразовать свое изображение из CV_8UC3 - 3-канального изображения в CV_8UC1 - одноканальное (в градациях серого) изображение. Для этого просто позвоните

cv::cvtColor(img, img, cv::BGR2GRAY);

до загрузки данных в графический процессор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...