打印垫浮动

时间:2011-12-23 16:04:26

标签: c++ opencv

我正在使用OpenCV计算灰度图像的渐变,某些像素的结果值为负(但我无法在屏幕上打印)。

我的代码:

Mat gradX, kernelX, gray;
//i load an rgb image and convert it to grayscale here
gray.create(rows,cols,CV_32FC1);
kernelX = (Mat_<float>(1,3) << -1, 0, 1); 
gradX.create(rows,cols,CV_32FC1);
filter2D(gray,gradX,-1, kernelX,cvPoint(-1, -1),0); 

我尝试过这两种方法来打印gradX左上角5x5的值

方法1 (它打印所有非常小的值(例如1.23e-40等)):

for (int j=0; j<5;j++)
{
    for (int i=0; i<5;i++)
    { 
        cout<< (float)gradX.at<float>(j, i) << " "; 
    }
    cout<< endl;
}

方法2 (它打印正值很好,但所有负值都显示为“0”):

for (int j=0; j<5;j++)
{
    uchar* data=gradX.ptr<uchar>(j);
    for (int i=0; i<5;i++)
    { 
        cout<< (float)data[i] << " "; 
    }
    cout<< endl;
}

2 个答案:

答案 0 :(得分:1)

你为什么不

cout << gradX << endl;

答案 1 :(得分:1)

对于方法2,那里的东西看起来很怪异, 将其改为:

for (int j=0; j<5;j++)
{
    float* data=gradX.ptr<float>(j);
    for (int i=0; i<5;i++)
    { 
        cout<< data[i] << " "; 
    }
    cout<< endl;
}

你正在访问浮点数组(4字节)中的第i个字符(字节)而不是访问第i个浮点数(你正在做(开始+ i *字节)你需要(开始) + i * 4 * byte))