gpt4 book ai didi

OpenCV C++ : how access pixel value CV_32F through uchar data pointer

转载 作者:太空宇宙 更新时间:2023-11-03 20:42:33 25 4
gpt4 key购买 nike

简而言之,我想知道是否可以直接访问像素值CV_32F 垫,通过垫成员“uchar* 数据”。

如果 Mat 是 CV_8U,我可以毫无问题地完成,例如:

// a matrix 5 columns and 6 rows, values in [0,255], all elements initialised at 12
cv:Mat A;
A.create(5,6, CV_8UC1);
A = cv::Scalar(12);

//here I successfully access to pixel [4,5]
uchar *p = A.data;
int value = (uchar) p[4*A.step + 5];

问题是当我尝试用下面的矩阵做同样的操作时,

// a matrix 5 columns, 6 rows, values in [0.0, 1.0], all elements initialised at 1.2
cv::Mat B;
B.create(5,6, CV_32FC1);
B = cv::Scalar(1.2);

//this clearly does not work, no syntax error but erroneous value reported!
uchar *p = B.data;
float value = (float) p[4*B.step + 5];

//this works, but it is not what I want to do!
float value = B.at<float>(4,5);

非常感谢,瓦莱里奥

最佳答案

您可以使用返回指向矩阵行的指针的ptr方法:

for (int y = 0; y < mat.rows; ++y)
{
float* row_ptr = mat.ptr<float>(y);
for (int x = 0; x < mat.cols; ++x)
{
float val = row_ptr[x];
}
}

如果矩阵是连续的,您还可以将 data 指针转换为 float 并使用 elem_step 而不是 step:

float* ptr = (float*) mat.data;
size_t elem_step = mat.step / sizeof(float);
float val = ptr[i * elem_step + j];

关于OpenCV C++ : how access pixel value CV_32F through uchar data pointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17569097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com