簡體   English   中英

錯誤:OpenCV 3.4.0 CUDA ORB功能檢測

[英]Error: OpenCV 3.4.0 CUDA ORB feature detection

我正在使用ORB檢測器檢測視頻幀的關鍵點,但是它給了我以下錯誤:

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

ORB檢測器的CPU功能正常運行。 但是對於GPU,它無法檢測到圖像的關鍵點。 我也嘗試過使用CUDA的FastFeatureDetector ,但它也失敗了。

我在下面附上我的代碼:

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)轉換該圖像img.convertTo(img1, CV_8UC1)但仍無法處理,並向我拋出錯誤OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat img.convertTo(img1, CV_8UC1)的錯誤OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat

您必須將圖像從CV_8UC3-3通道圖像轉換為CV_8UC1-單通道(灰度)圖像。 為此,只需致電

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

在將數據上傳到GPU之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM