0x00007FF89C214ED9 处(位于 ConsoleApplication14.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000003D1533DBB0 处。
Mat correlate_caculate(Mat img1, Mat img2, int row, int col) {
Mat img1_gray(row, col, CV_64FC1);
Mat img2_gray(row, col, CV_64FC1);
cvtColor(img1, img1_gray, COLOR_RGBA2GRAY);
cvtColor(img2, img2_gray, COLOR_RGBA2GRAY);
Mat correlate(row, col, CV_64FC1);
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
double *ptr1 = img1_gray.ptr<double>(i, j);
double *ptr2 = img2_gray.ptr<double>(i, j);
double *ptr = correlate.ptr<double>(i, j);
double x1 = 0;
double x2 = 0;
for (int k = -1; k <= 1; k++) {
for (int t = -1; t <= 1; t++) {
double *ptr11 = img1_gray.ptr<double>(i + k, j + t);
double *ptr22 = img2_gray.ptr<double>(i + k, j + t);
x1 += *ptr11;
x2 += *ptr22;
}
}
//3×3邻域窗口均值
x1 /= 9.0;
x2 /= 9.0;
//(i,j)处的相关系数
double a = 0, b = 0, c = 0;
for (int k = -1; k <= 1; k++) {
for (int t = -1; t <= 1; t++) {
double *ptr11 = img1_gray.ptr<double>(i + k, j + t);
double *ptr22 = img2_gray.ptr<double>(i + k, j + t);
a += (*ptr11 - x1)*(*ptr22 - x2);
b += pow(*ptr11 - x1, 2);
c += pow(*ptr22 - x2, 2);
}
}
*ptr = a / (sqrt(b)*sqrt(c));
}
}
return correlate;
}
指针比较多,可能是哪个指针为空,没有判断是否为空直接进行指针操作造成的
最好的办法一是对指针增加有效性判断;二是调试。光看代码不好判断