我有以下代码:
CGFloat data[6] = {0.0f,1.0f,2.0f,3.0f,4.0f,5.0f};
cv::Mat warp_mat( 6,1, CV_32FC1,data);
for (int i=0;i<6;++i)
printf("%f, ",warp_mat.at<float>(i));
当我在iPhone5和iPhone5模拟器上运行时,此代码可以正常工作。 然而,当我在iPhone6 / iPad及其模拟器上运行时,它会打印出乱码。 谁能告诉我为什么?
我使用此代码修复了它:
cv::Mat warp_mat( 6,1, CV_32FC1);
for (int j=0;j<6;++j)
warp_mat.at<float>(j)=data[j];
但我担心还有其他问题。任何建议\评论\想法将在这里赞赏。
答案 0 :(得分:1)
因为sizeof(CGFloat)
在64位系统上不等于sizeof(float)
。
CGFloat data[6] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
cv::Mat warp_mat(6, 1, CV_32FC1, data);
for (int i = 0; i < 6; ++i)
printf("%f, ",warp_mat.at<CGFloat>(i));
或
float data[6] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
cv::Mat warp_mat(6, 1, CV_32FC1, data);
for (int i = 0; i < 6; ++i)
printf("%f, ",warp_mat.at<float>(i));