我想知道sobel输出中存储的变量的正确类型(在我的情况下为x)。当我运行此代码时
Mat x;
Sobel( input, x, CV_32F, 1, 0);
for(int i=0;i<input.cols;i++){
for(int j=0;j<input.rows;j++){
printf("%f\n",x.at<float>(i,j));
}
}
我得到像
这样的东西213918711808.000000, 885887336448.000000 0.000000 0.000169 0.000000
但是当我跑步时
Mat x;
Sobel( input, x, CV_32F, 1, 0);
std::cout<<x<<endl;
我得到了这个结果(这个是正确的)
2, 0, 2, 4, 2, -6, -4, 0, -6, -10, -10, -34, ...
答案 0 :(得分:-1)
这是因为printf将%f视为double,而不是float。
我错了。我试图重现你的问题,两种类型的输出都给我一个正确的结果。检查x矩阵是否具有不同的大小或类型,CV_32F为5。
std::cout << x.type() << " " << x.rows << " " << x.cols << " " << std::endl;
std::cout << input.type() << " " << input.rows << " " << input.cols << " " << std::endl;