opencv - 如何将任何图像转换为 CV_32FC1

标签 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。有什么想法吗?

最佳答案

您会看到灰色和 RGB 图像的结果不一致,这两种情况下 channel 数的差异,32FC1 可以分解为:

  • 32F - 32 bit floating value
  • C1 - Single channel


但是 RGB 图像或 BGRA 图像分别有 3、4 channel ,所以我们不能使用 C1 来处理它们,因此我们需要使用 32FC3 来处理 3 channel 图像和 32FC4 来处理 4 channel 图像。

关于opencv - 如何将任何图像转换为 CV_32FC1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44218666/

相关文章:

python - 如何在 Python 中使用 OpenCV 将图像的背景颜色设置为白色

c++ - 多 channel cv::Mat 的最大单 channel cv::Mat

c++ - 提取给定坐标内的像素

image-processing - 编程相机以选择ROI

opencv - 在 Raspberry Pi Raspbian 上安装 opencv

c++ - 如何在 OpenCV C++ 中使用 warpAffine 函数

algorithm - 有没有办法在不使用 viola-jones 算法的情况下用 opencv 检测人脸?

python - 识别砖墙中的砖 block

python - 当我尝试使用网络摄像头时出错(Python)

python - 属性错误 : module 'cv2' has no attribute 'imread'