为什么OpenCV构造函数在iPhone5而不是iPhone6 / iPad中工作?

时间:2015-03-07 12:38:25

标签: c++ ios iphone constructor

我有以下代码:

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];

但我担心还有其他问题。任何建议\评论\想法将在这里赞赏。

1 个答案:

答案 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));