【问题标题】:Convert uchar Mat to float Mat in OpenCV?在OpenCV中将uchar Mat转换为float Mat?
【发布时间】:2011-09-12 05:31:20
【问题描述】:

在 OpenCV 中,如果我有一个包含 uchar 数据的 Mat img,我如何将数据转换为浮点数?有可用的功能吗?谢谢。

【问题讨论】:

  • 在Python中,由于图片是NumPy数组,所以可以使用img = img.astype(np.float32)

标签: c++ opencv


【解决方案1】:

如果你的意思是 c++,那么你有

#include<opencv2/opencv.hpp>
using namespace cv;
Mat img;
img.create(2,2,CV_8UC1);
Mat img2;
img.convertTo(img2, CV_32FC1); // or CV_32F works (too)

opencv2refman.pdf 中的详细信息。

更新:

CV_32FC1 用于 1 通道(C1,即灰度图像)浮点值 (32F) 像素

CV_8UC1 用于 1 通道(C1,即灰度图像)无符号字符 (8UC) 值。

更新 2:
根据 Arthur Tacca 的说法,只有 CV_32F 是正确的(或者可能是 CV_8U),因为 convertTo 不应更改通道数。听起来合乎逻辑吧?然而,当我查看 opencv 参考手册时,我找不到任何关于此的信息,但我同意他的看法。

【讨论】:

  • 你能告诉我我们需要在哪里使用32F8U
  • 这实际上是我的问题,为什么我们需要使用浮点值像素以及我们需要使用字符值的像素
  • 这取决于位深度。如果你的灰度图像有 256 种不同颜色的深度,那么它就是 8UC1。典型的例子是灰度32FC1,彩色8UC3。
  • @BarnabasSzabolcs 这是否也适用于多通道图像(即将 CV_8UC3 转换为 CV_8FC3)?
  • 我不确定,您可以使用矩阵构造函数对小图像进行尝试,以确认它是否有效。 docs.opencv.org/2.4/doc/tutorials/core/…
【解决方案2】:

使用cvConvert 函数。在 Python 中:

import cv
m = cv.CreateMat(2, 2, cv.CV_8UC1)
m1 = cv.CreateMat(2, 2, cv.CV_32FC1)
cv.Convert(m, m1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2015-12-13
    • 2017-02-19
    • 2018-11-28
    • 2015-02-16
    相关资源
    最近更新 更多