gpt4 book ai didi

c - 如何访问 cvMat 中的数据

转载 作者:行者123 更新时间:2023-11-30 17:27:23 26 4
gpt4 key购买 nike

我正在尝试访问 cvMat 中的数据。

这是我的代码:

// Declare
int rank = 3;
CvMat* warp_matrix = cvCreateMat(rank,rank,CV_32FC1);

// Using
cvGetPerspectiveTransform(imgSrc,imgDst,warp_matrix);

for(int i=0; i<rank; i++)
{
for(int j=0; j<rank; j++)
{
std::cout << warp_matrix->data[i][j] << std::endl;
}
}

但是我发现一个错误:

error: no match for 'operator[]' (operand types are 'CvMat::<anonymous union>' and 'int')

我不知道如何解决它 - 我尝试像这样的CV_MAT_ELEM():

std::cout << CV_MAT_ELEM(warp_matrix,double,i,j) << std::endl;

它仍然不起作用(捕获此错误):

error: request for member 'cols' in 'warp_matrix', which is of pointer type 'CvMat*' (maybe you meant to use '->' ?)

我现在不知道该怎么办。你能帮我吗?

最佳答案

使用宏CV_MAT_ELEM。它需要一个 cvMat,而不是指向 cvMat 的指针。如果更需要指针:

mx->data;

是一个未命名的指针 union (每种类型):

mx->data.ptr; // uchar
mx->data.i; // int
mx->data.s; // short
mx->data.db; // double
mx->data.fl; // float

请注意,这些是一维的,因此 mx[row][col] 样式访问不起作用。考虑示例:

CvMat * mx = cvCreateMat( 3, 4, CV_32FC1 );
LOG->PrintLn( "%u x %u", mx->cols, mx->rows );
for( uint rdx = 0; rdx < mx->rows; ++rdx )
{
for( uint cdx = 0; cdx < mx->cols; ++cdx )
{
CV_MAT_ELEM( * mx, float, rdx, cdx ) = ( 1 + rdx ) * 10 + cdx;
LOG->Print( "\t%.1f", mx->data.fl[ mx->cols * rdx + cdx ] );
}
LOG->PrintLn();
}

(您的示例中未声明矩阵 imgSrc 和 imgDst,因此我无法生成转换。)

关于c - 如何访问 cvMat 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26425021/

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