【发布时间】:2021-12-23 18:59:27
【问题描述】:
我遇到了一个奇怪的问题。
我的垫子被声明为:
cv::Mat matr(src.rows, src.cols, CV_32FC1);
如果我使用cout<<matr 打印它,我会得到 0 到 255 范围内的所有数据,一切都很好。
如果我尝试使用此循环访问:
float* matrF= (float*)matr.data;
for (int r=0; r<matrF.rows; r++)
{
for (int c=0; c<matrF.cols; c++)
{
std::cout<<matrF[r*matr.cols+c]<<std::endl;
}
}
我得到许多值,例如:4.684e-42, 2.223e-22 ecc。
如果我使用
for (int r=0; r<matrF.rows; r++)
{
for (int c=0; c<matrF.cols; c++)
{
std::cout<<matr.data[r*matr.cols+c]<<std::endl;
}
}
它打印一些随机字符并且没有值。
我可以访问使用 cout<<matr 打印的元素吗?
我不想使用 openCV 中的函数来访问它们,我正在尝试遍历 matr.data...
我不能使用mat.at<float> 或.step1()。
谢谢。
---------解决方案
如果不是
for (int r=0; r<matrF.rows; r++)
{
for (int c=0; c<matrF.cols; c++)
{
std::cout<<matrF.data[r*matr.cols+c]<<std::endl;
}
}
我用
for (int r=0; r<matrF.rows; r++)
{
for (int c=0; c<matrF.cols; c++)
{
float val = matF.data[r*matr.cols+c];
std::cout<<val<<std::endl;
}
}
问题消失了。
【问题讨论】:
-
刚刚发现问题。有人可以解释一下吗?我编辑我的帖子。
-
Inszeadt of rmatr.cols 使用 rmatr.step 或 rowPrt(r) 如果你想让它对所有类型的矩阵都稳定(可以很容易地有一个填充在每一行的末尾)。 .at
(row, col) 是另一种快速(在发布模式下)、漂亮且可读性好的方式。
标签: c++ opencv floating-point mat