使用 convertTo 从 CV_16SC1 转换为 CV_32FC1 [关闭]
Posted
技术标签:
【中文标题】使用 convertTo 从 CV_16SC1 转换为 CV_32FC1 [关闭]【英文标题】:Converting from CV_16SC1 to CV_32FC1 using convertTo [closed] 【发布时间】:2016-03-28 22:02:34 【问题描述】:我正在尝试从 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】:我没有看到任何转换无效的证据(也没有任何不应该的原因)。
#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
看你的sn-p,我什至不确定你是怎么得到这些数字的:
16 = 2*8+0 -- 3 通道,8 位,无符号 21 = 2*8+5 -- 3 通道,32 位,浮点数您在解释结果数据类型时犯了一个错误:
#define CV_32F 5
【讨论】:
这真的很奇怪。我重新运行只是为了确保确实得到 16 和 21。也许是 opencv 的版本?我正在使用 2.4.11 好的,我知道问题出在哪里了,我一开始以为我有 3 个频道,但你不能从 3 个频道转到 1 个频道 我也用 2.4.11 做到了这一点。我明白了,这是有道理的。所以你实际上是从CV_8UC3
到CV_32FC3
,对吧?
是的。我弄错了我的初始数据类型以上是关于使用 convertTo 从 CV_16SC1 转换为 CV_32FC1 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章