我想将用作输入的任何图像转换为 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/