Mat的convertTo函数在OpenCV中将灰度图像的类型转换为CV_32F时抱怨断言错误
Mat's convertTo function complains assert error while converting the type of grayscale image to CV_32F in OpenCV
我是opencv的新招募。
有我的代码。
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char *argv[])
{
Mat I = imread("water.jpg", 0);
Mat W = imread("laosiji.jpg", CV_LOAD_IMAGE_GRAYSCALE);
cout << I.channels() << endl;
Mat CI(I.rows,I.cols,CV_32FC);
I.convertTo(CI, CV_32FC);
Mat FI;
Mat IFI;
dft(CI,FI,DFT_COMPLEX_OUTPUT | DFT_SCALE);
idft(FI,IFI);
imshow("water.jpg after idft transformation",IFI);
return 0;
}
当我运行程序时,它给了我一个错误:
OpenCV Error: Bad number of channels (Source image must have 1, 3 or 4 channels) in cvConvertImage, file /var/tmp/portage/media-libs/opencv-3.1.0-r7/work/opencv-3.1.0/modules/imgcodecs/src/utils.cpp, line 611
terminate called after throwing an instance of 'cv::Exception'
what(): /var/tmp/portage/media-libs/opencv-3.1.0-r7/work/opencv-3.1.0/modules/imgcodecs/src/utils.cpp:611: error: (-15) Source image must have 1, 3 or 4 channels in function cvConvertImage
但是,从上面的代码中,该程序输出的渠道是1。我很难解决这个问题,因为我对OpenCV不是很熟悉,是否可以为我出来为我解释吗?预先感谢。
这个答案将由@danmašek.1撰写,但他可能很忙,我已经等了几天,没有任何回应。结果,我必须回答我自己。&ensp;&ensp;首先,错误的关键不是convertTo()
函数的明确调用。否则,它是由 imshow()
函数中的隐式调用引起的。从我的代码中,我在idft()
之后发动imshow()
。但是idft()
返回带有2个通道的矩阵。convertTo
的隐式调用需要一个带有1、3或5个频道的矩阵作为参数。
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 概念中的cv限定符需要表达式参数列表
- 将CHW格式的浮点向量转换为cv::Mat
- 错误的cv::face FacemarkLBF实例化
- 如何检查给定的参数是否为 cv::noArray()?
- 开放 CV 中的动态内存分配,用于视频处理
- 如何在 opencv 中使用 cv::VideoCapture::waitAny()
- 错误:未定义对cv::cudacodec::createVideoReader的引用
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- C++:从GPU内存(cudaMemcpy2D)获取BGR图像(cv::Mat)
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 将 cv::mat 转换为 QImage
- Inference pytorch C++ with alexnet and cv::imread image
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用
- cv::Normalise() 中的 L2_NORM 和 NORM_MINMAX 实现有什么区别?
- 将 cv::Mat 转换为 std::vector 的通用函数
- OpenCV undefined reference to 'cv::imread(cv::String const&, int)'
- 在 QML VideoOutput 中将 cv::mat 显示为 QVideoFrame
- 如何应用带有cv::cuda和C++的Canny Edge检测器?
- cv::connectedComponents vs cv::findContours 的实现和速度差异