我想将我用作输入的任何图像转换为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.任何想法?
答案 0 :(得分:2)
在这两种情况下,您都会看到灰色和RGB图像的结果与通道编号的差异不一致,32FC1可以细分为:
- 32F - 32位浮动值
- C1 - 单通道
但RGB图像或BGRA图像分别有3,4个通道,所以我们不能使用C1,因此我们需要使用32FC3用于3通道图像,32FC4用于4通道图像。