c++ - 将boost数组转换为opencv mat

标签 c++ opencv boost

我尝试将 boost::array rightCamInfo.K 转换为 opencv Mat cv::Mat K。我没有找到此设置的任何函数,所以我编写了一个迭代方法:

float tempK[9];
cv::Mat K;
for (int i = 0; i < 9; i++) {
   tempK[i] = rightCamInfo.K[i];
}
K = cv::Mat(3, 3, CV_64F, &tempK);

但这给了我奇怪的结果。给定数据的范围在 400 和 0 之间,结果矩阵约为 5 * 10^(-315)。所以很明显存在一些转换错误。怎么了?是我为矩阵选择了错误的类型还是这个数组类型不合适?

最佳答案

您应该使用 CV_32F 而不是 CV_64F 并指向 tempK 的第一个元素

K = cv::Mat(3, 3, CV_32F, &tempK[0]);

Mat K(3, 3, CV_32F, &tempK[0]);

关于c++ - 将boost数组转换为opencv mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37253354/

相关文章:

c++ - 通过引用传递 bool 并使用其最新值

c++ - 更改 boost::property_tree 读取将字符串转换为 bool 值的方式

c++ - C++11 unique_ptr 和 shared_ptr 是否能够转换为彼此的类型?

c++ - 是否可以定义 enumalpha?

opencv 设置鼠标回调

c++ - 使用 boost::lock_guard 进行简单的共享数据锁定

c++ - 另一个问题 : Passing argument by reference

c++ - 迭代基本类型时使用 const 引用有什么缺点吗?

c# - EmguCV:无法加载 DLL 'cvextern':找不到指定的过程

c++ - 使用 OpenCV 进行球检测