懂opencv中的cvmat的请进啊
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了懂opencv中的cvmat的请进啊相关的知识,希望对你有一定的参考价值。
CvMat * mat1 = cvCreateMat(iDftY, iDftX, CV_64FC2);
for (int i = 0; i < iDftY; i++)
for (int j = 0; j < iDftX; j++)
double & re = ((double*)(mat1->data.ptr + mat1->step * i))[j * 2];
double & im = ((double*)(mat1->data.ptr + mat1->step * i))[j * 2 + 1];
请问上面的程序中的
double & re = ((double*)(mat1->data.ptr + mat1->step * i))[j * 2];
double & im = ((double*)(mat1->data.ptr + mat1->step * i))[j * 2 + 1];
是什么意思,有什么用?
double & re = ((double*)(mat1->data.ptr + mat1->step * i))[j * 2]; 其中mat1->data.ptr是矩阵数据的uchar*类型的首地址,mat1->step是矩阵的宽度,整条语句就是取第i行第0个通道的第j*2个元素的值,赋值给一个引用re
同理double & im = ((double*)(mat1->data.ptr + mat1->step * i))[j * 2 + 1];是第1个通道的值给引用im 参考技术A 好像是可以直接转的,要不就是用iplimage中的imagedata转成cvMat 你可以加载的时候直接用cvMat IplImage*img=cvLoadImage(agrv[1],0); 用CvMat*mat=,
OpenCV CvMat 到 Mat 和指针
【中文标题】OpenCV CvMat 到 Mat 和指针【英文标题】:OpenCV CvMat to Mat and pointers 【发布时间】:2011-08-06 07:51:24 【问题描述】:我正在尝试将一些代码从使用 OpenCV 的 CvMat 转换为 Mat,但在使用指针时遇到了一些问题。
这是原始代码:
CvMat *m_projectedTrainFaceMat;
float d_i;
i = 0;
d_i = projectTestFace[i] - m_projectedTrainFaceMat->data.fl[iTrain * m_nEigens + i];
这是我更新的代码:
Mat *m_projectedTrainFaceMat;
float d_i;
i = 0;
d_i = projectTestFace[i] - m_projectedTrainFaceMat->data[iTrain * m_nEigens + i];
如您所见,我从对数据的调用中删除了 .fl,但我不太清楚如何将数据作为浮点数返回。
有什么建议吗?我尝试将其转换为 float 和 (float *) 但最终导致错误/错误。
e: projectTestFace 是一个浮点数*。
【问题讨论】:
【参考方案1】:假设您的记忆是连续的,上述 Andrey 的代码是正确的。在某些情况下,情况并非如此,我们不应该假设。也许更直接的方法(不必使用指针)如下:
d_i = projectTestFace[i] - (*m_projectedTrainFaceMat).at<float>(row, col);
与 Andrey 类似,我假设您的 m_projectedTrainFaceMat 已初始化为具有 CV_32FC1 元素。
【讨论】:
以上是关于懂opencv中的cvmat的请进啊的主要内容,如果未能解决你的问题,请参考以下文章
懂网页的请进:这个网页中有一个通知公告的链接为啥打不开,是内网用户才能打开还是其他啥原因?
OpenCV 中 IplImage,CvMat,Mat中的type是怎么回事