Mat的convertTo函数在OpenCV中将灰度图像的类型转换为CV_32F时抱怨断言错误

Mat's convertTo function complains assert error while converting the type of grayscale image to CV_32F in OpenCV

本文关键字:32F CV 错误 断言 类型转换 函数 convertTo OpenCV 灰度图像 Mat      更新时间:2023-10-16

我是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个频道的矩阵作为参数。