OpenCV:如何读取浮点图像

Posted

技术标签:

【中文标题】OpenCV:如何读取浮点图像【英文标题】:OpenCV: how to read an image of floats 【发布时间】:2013-03-04 17:41:15 【问题描述】:

我在 openCV 中创建了一个 Mat 如下:

cv::Mat m = cv::Mat(10,10, CV_32FC1);
for(int i = 0; i < 10; i++)
    for(int j = 0; j < 10; j++)
        m.at<float>(i,j) = 1;
     

并通过以下方式将其保存到磁盘:

imwrite("out.png", m);

我现在尝试如下阅读:

cv::Mat m = imread("out.png", CV_LOAD_IMAGE_UNCHANGED);

但 m 中的数据似乎是完全随机的,例如像 m.at&lt;float&gt;(5,5) 这样访问时。

如何读回写入其中的数据?例如,在 matlab 中我可以这样做:

m = imread("out.png") 

它给了我正确的 1 矩阵

谢谢

【问题讨论】:

【参考方案1】:

imwrite

函数imwrite将图像保存到指定文件。图像格式是根据文件扩展名选择的(有关扩展名列表,请参阅 imread())。 只有 8 位(或 16 位无符号 (CV_16U),在 PNG、JPEG 2000 和 TIFF 的情况下)单通道或 3 通道(使用“BGR”通道顺序)图像可以使用此函数保存。如果格式、深度或通道顺序不同,使用 Mat::convertTo() 和 cvtColor() 进行转换后再保存。 或者,使用通用 XML I/O 函数将图像保存为 XML 或 YAML 格式。

depth, convertTo

【讨论】:

以上是关于OpenCV:如何读取浮点图像的主要内容,如果未能解决你的问题,请参考以下文章

Opencv如何使用MatIterator迭代具有浮点RGB值的彩色图像?

OpenCV 读取图像并使用整数值管理它们的像素(如 matlab)

OpenCV 将浮点数据输入图像拼接过程

如何opencv读取摄像头并保存每一帧图像?

如何opencv读取摄像头并保存每一帧图像

如何在 OpenCV 中将图像读取为双倍?