OpenCV C+中的行迭代器+;在Android中
我写了一个程序,获得病变处的颜色不对称值。 我在VisualStudio中的程序工作正常,并且颜色不对称。但android中的程序(使用本机)总是返回0。 问题是点[j]总是有相同的值,因此avg_i[i]和avg的值相等。 我的代码: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.尺寸()]
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;ireMat&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;