使用convertTo从CV_16SC1转换为CV_32FC1

时间:2016-03-28 22:02:34

标签: c++ opencv computer-vision

我正在尝试从CV_16SC1转换为CV_32SC1

我的代码非常简单:

//print value of data.type() = 16
data.convertTo(data, CV_32FC1); 
//print new value of data.type() = 21

有没有理由不进行转换?也许由于某种原因,它们无法在这两种类型之间进行转换?

因为根据这篇文章:Getting enum names (e.g. CV_32FC1) of OpenCV image types?

我的结果是CV_32SC1,这是非常不受欢迎的,因为我试图在我的矩阵上执行矩阵乘法,这就是为什么我希望它有浮点类型。

1 个答案:

答案 0 :(得分:0)

我没有看到转换不起作用的任何证据(也没有任何理由说明它不应该)。

#include <opencv2/opencv.hpp>
#include <iostream>


int main()
{
    cv::Mat data = cv::Mat::ones(2, 2, CV_16SC1);
    std::cout << "Initial data=" << data << "\n";
    std::cout << "Initial type= " << data.type() << "\n";
    std::cout << "Type is CV_16SC1: " << ((data.type() == CV_16SC1) ? "true" : "false") << "\n";

    cv::Mat converted;
    data.convertTo(converted, CV_32FC1);

    std::cout << "Converted" << converted << "\n";
    std::cout << "Converted type=" << converted.type() << "\n";
    std::cout << "Type is CV_32FC1: " << ((converted.type() == CV_32FC1) ? "true" : "false") << "\n";

    return 0;
}

来自控制台的成绩单:

Initial data=[1, 1;
  1, 1]
Initial type= 3
Type is CV_16SC1: true
Converted[1, 1;
  1, 1]
Converted type=5
Type is CV_32FC1: true

看看你的片段,我甚至不确定你是如何得到这些数字的:

  • 16 = 2 * 8 + 0 - 3通道,8位,无符号
  • 21 = 2 * 8 + 5 - 3通道,32位,浮动

您解释了生成的数据类型时发生了一个错误:

#define CV_32F  5