(-5:Bad argument) image is empty or has incorrect depth (!=CV_8U) in function 'cv::xfeatures2d::SIFT_Impl::detectAndCompute'什么意思如何解决
时间: 2023-12-19 11:04:15 浏览: 221
这个错误通常是由于输入图像的深度不正确引起的。SIFT算法要求输入图像的深度必须是8位无符号整数(CV_8U),如果图像的深度不正确,则会出现此错误。
要解决这个问题,你可以尝试将输入图像转换为正确的深度,可以使用OpenCV库提供的函数cv::convertScaleAbs()将图像转换为8位无符号整数深度。具体实现代码如下:
```
cv::Mat input_image = imread("input.jpg", cv::IMREAD_COLOR);
cv::Mat gray_image;
cv::cvtColor(input_image, gray_image, cv::COLOR_BGR2GRAY);
gray_image.convertTo(gray_image, CV_8U);
```
如果你已经将图像转换为正确的深度,但仍然出现此错误,请确保图像不为空,可以使用以下代码检查图像是否为空:
```
if (input_image.empty())
{
std::cout << "Input image is empty!" << std::endl;
return -1;
}
```
希望这些信息能够帮助你解决问题。
相关问题
cv2.error: OpenCV(3.4.2) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1121: error: (-5:Bad argument) image is empty or has incorrect depth (!=CV_8U) in function 'cv::xfeatures2d::SIFT_Impl::detectAndCompute'已近确保图像深度为8而且图像输入也正确,为什么还出现这个错误
如果您已经确保了输入的图像不为空并且深度为CV_8U,那么可能是由于其他原因导致的错误。可能是输入的图像大小不符合SIFT算法的要求,或者是输入的图像通道数不正确。您可以尝试将图像的大小调整为SIFT算法所需的大小(例如,如果您使用的是默认的SIFT算法,则图像大小应该至少为128x128),并确保图像通道数正确(SIFT算法需要灰度图像)。如果问题仍然存在,请检查您的代码是否有其他潜在的错误。
xception has occurred: error OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'warpAffine' > Overload resolution failed: > - M is not a numpy array, neither a scalar > - Expected Ptr<cv::UMat> for argument 'M' File "C:\Users\tengyun\Desktop\lab4\Harris.py", line 221, in rotateImage rotate = cv2.warpAffine(src, RotateMatrix, (w, h), borderValue=(50, 46, 65)) File "C:\Users\tengyun\Desktop\lab4\Harris.py", line 256, in <module> rotate = rotateImage(img, degree) cv2.error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'warpAffine' > Overload resolution failed: > - M is not a numpy array, neither a scalar > - Expected Ptr<cv::UMat> for argument 'M'
这个错误通常意味着你在使用 OpenCV 的 warpAffine 函数时,传递了错误的参数类型。根据错误信息,可能是你传递了一个非 numpy 数组或者标量值,或者在参数 'M' 的位置上需要传递一个 Ptr<cv::UMat> 类型的指针,但是你传递了其他类型的值。请检查你的代码,确保你传递给 warpAffine 函数的所有参数类型都正确。可能的解决方案包括:使用正确类型的数组或标量值、使用 cv::UMat 类型的指针、或者对数组进行类型转换。另外,你还可以检查一下 OpenCV 的版本是否正确,以及是否需要添加额外的库或依赖项。
阅读全文