如何将任何图像转换为CV_32FC1

时间:2017-05-27 15:33:13

标签: opencv

我想将我用作输入的任何图像转换为CV_32FC1类型。我的代码如下:

char fname[MAX_PATH];
while (openFileDlg(fname))
{
    Mat img = imread(fname, CV_LOAD_IMAGE_UNCHANGED);

    Mat src(img.rows, img.cols, CV_32FC1);
    Mat dst(img.rows, img.cols, CV_32FC1);

    if (img.type() == 0)
    {
        img.convertTo(img, CV_32FC1, 1.0f / 255.0f);
        src = img.clone();
    }
    else
    {
        img.convertTo(img, CV_32FC1);

    }

    std::cout << img.type() << ' ' << src.type();
}

对于灰度图像,它可以工作,但是当我使用彩色图像时,转换不起作用。例如:对于CV_32FC1,值为5.当我上传彩色图像时,它给出值16,转换后为21.任何想法?

1 个答案:

答案 0 :(得分:2)

在这两种情况下,您都会看到灰色和RGB图像的结果与通道编号的差异不一致,32FC1可以细分为:

  
      
  • 32F - 32位浮动值
  •   
  • C1 - 单通道
  •   

但RGB图像或BGRA图像分别有3,4个通道,所以我们不能使用C1,因此我们需要使用32FC3用于3通道图像,32FC4用于4通道图像。