[英]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.