OpenCV C+中的行迭代器+;在Android中

OpenCV C+中的行迭代器+;在Android中,android,c++,opencv,Android,C++,Opencv,我写了一个程序,获得病变处的颜色不对称值。 我在VisualStudio中的程序工作正常,并且颜色不对称。但android中的程序(使用本机)总是返回0。 问题是点[j]总是有相同的值,因此avg_i[i]和avg的值相等。 我的代码: Mat&srcMat=*(Mat*)src; Mat&mask_tr=*(Mat*)掩模; 席灰色; CVT颜色(srcMat、灰色、CV_BGr2灰色); 双重总和=0,平均值=0,NCD=0,不匹配=0; double*avg_i=新的双精度[p.尺寸()]

我写了一个程序,获得病变处的颜色不对称值。 我在VisualStudio中的程序工作正常,并且颜色不对称。但android中的程序(使用本机)总是返回0。 问题是点[j]总是有相同的值,因此avg_i[i]和avg的值相等。 我的代码:

Mat&srcMat=*(Mat*)src;
Mat&mask_tr=*(Mat*)掩模;
席灰色;
CVT颜色(srcMat、灰色、CV_BGr2灰色);
双重总和=0,平均值=0,NCD=0,不匹配=0;
double*avg_i=新的双精度[p.尺寸()];
double*ncd=新的double[p.size()];
double*XOR_Cs_Cl=新的double[p.size()];
int A_x=0,A_t=0;
向量buf;
对于(int i=0;ire
Mat&srcMat=*(Mat*)src;
,使用可能的UB和未定义的标识符开始代码示例是非常聪明的。
Mat& srcMat = *(Mat*)src;
Mat& mask_tr = *(Mat*)Mask;

Mat gray;
cvtColor(srcMat, gray, CV_BGR2GRAY);

double summation=0, avg=0, NCD=0, mismatch=0;
double* avg_i = new double[p.size()];
double* ncd = new double[p.size()];
double* XOR_Cs_Cl = new double[p.size()];
int A_x=0, A_t=0;
vector<Vec3b> buf;

for(int i=0; i<p.size(); i++){

    LineIterator it(gray, p5, p[i], 8);
    vector<Point> points(it.count);

    for(int j=0; j<it.count-1; j++)
    {
        buf.push_back( Vec3b(*it) );
        points[j] = it.pos();
        it=it++;

        summation += int(gray.at<uchar>(points[j].y , points[j].x));
    }

    avg_i[i] = summation / (it.count-1);
    summation = 0;
    avg += avg_i[i];
}

avg = avg/p.size();

for(int i=0; i<p.size(); i++){
    ncd[i] = avg_i[i] * (100/avg);
    A_t += ncd[i];
    XOR_Cs_Cl[i] = abs(100 - ncd[i]);
    A_x += XOR_Cs_Cl[i];
}

mismatch = (double(A_x) / double(A_t))*100;

delete [] avg_i;
delete [] ncd;

return mismatch;