【发布时间】:2010-11-27 17:17:18
【问题描述】:
以下是来自 C++ 过程的一些代码。原件可以在这里找到; https://code.ros.org/trac/opencv/browser/trunk/opencv/modules/imgproc/src/grabcut.cpp
我的观点是我是一个 C# 而不是 C++ 程序员,所以这个代码对我来说有点神秘,即使我通过一个代码转换器运行它并且它没有改变。
我的问题是:a)。 'coefs' 如何成为一个数组,以及 b)。 'c' 是如何填充的?
提供更多信息:'coefs' 开始时似乎不是一个数组,而 'c' 似乎神奇地获得了至少 8 个项目
// fields in class called MAT:
// a distance between successive rows in bytes; includes the gap if any
size_t step;
// pointer to the data
uchar* data;
// where ptr comes from:
template<typename _Tp> _Tp* ptr(int y=0);
template<typename _Tp> inline _Tp* Mat::ptr(int y)
{
CV_DbgAssert( (unsigned)y < (unsigned)rows );
return (_Tp*)(data + step*y);
}
.....
// original question code:
static const int componentsCount = 5;
Mat model;
float* coefs;
float* mean;
float* cov;
coefs = model.ptr<float>(0);
mean = coefs + componentsCount;
cov = mean + 3*componentsCount;
for( int ci = 0; ci < componentsCount; ci++ )
if( coefs[ci] > 0 )
calcInverseCovAndDeterm( ci );
void GMM::calcInverseCovAndDeterm( int ci )
{
if( coefs[ci] > 0 )
{
float *c = cov + 9*ci;
float dtrm =
covDeterms[ci] = c[0]*(c[4]*c[8]-c[5]*c[7]) - c[1]*(c[3]*c[8]-c[5]*c[6]) + c[2]*(c[3]*c[7]-c[4]*c[6]);
【问题讨论】:
标签: c++ arrays pointers opencv