我正在使用的程序是读取一些位图,并期望32FC1图像.
我正在尝试创建这些图像
cv::Mat M1(255, 255, CV_32FC1, cv::Scalar(0,0,0));
cv::imwrite( "my_bitmap.bmp", M1 );
Run Code Online (Sandbox Code Playgroud)
但是当我检查深度时 - 它总是CV_8U
如何创建文件以便它们包含正确的信息?
更新:如果我使用不同的文件扩展名也没有区别 - 例如tif或png
我正在阅读它 - 使用已经实现的代码 - cvLoadImage
.
我正在尝试创建现有代码(检查图像类型)可以使用的文件.
我无法转换现有代码中的文件.现有代码不会尝试读取随机图像类型并将其转换为所需类型,但会检查文件是否为所需类型.
我发现了 - 谢谢你的答案 - cv :: imwrite只写整数类型的图像.
有没有另一种方法 - 使用OpenCV或其他东西 - 来编写图像,以便我最终得到CV_32F类型?
再次更新: 读取图像的代码...如果进入cv :: Mat:
cv::Mat x = cv::imread(x_files, CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR);
Run Code Online (Sandbox Code Playgroud)
现有代码:
IplImage *I = cvLoadImage(x_files.c_str(), CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR);
Run Code Online (Sandbox Code Playgroud)
您的问题是位图在内部将数据存储为整数而不是浮点数。如果您的问题是保存时出现舍入错误,您将需要使用不同的文件格式或在保存之前放大数据,然后在保存后缩小数据。如果您只想将读取文件后得到的矩阵转换为浮点数,可以使用 cv::convertto