为什么这样写c < src.cols + HW不能遍历所有的列

问题遇到的现象和发生背景

当运行均值滤波后的图像只显示了一半,另一半显示为黑色

问题相关代码,请勿粘贴截图
void MeanImage(Mat & src, Mat & dst, Size ksize) {

    //初始化输出图像
    dst = Mat::zeros(src.size(), src.type());

    //确保掩模宽高相等
    if (ksize.height != ksize.width) {
        ksize.height = ksize.width;
    }
    //确保掩模宽高为奇数
    if (ksize.height % 2 == 0) {
        ksize.height = ksize.height + 1;
        ksize.width = ksize.width + 1;
    }

    //掩模宽高的一半
    int HH = (ksize.height - 1) / 2;
    int HW = (ksize.width - 1) / 2;

    //扩充边缘像素
    Mat MakeBorder;
    copyMakeBorder(src, MakeBorder, HH, HH, HW, HW, BORDER_REFLECT_101);

    //遍历除边界像素外的所有像素
    int sum = 0;
    for (size_t r = HH; r < src.rows + HH; r++) {
        for (size_t c = HW; c < src.cols + HW; c++) {
            //计算掩模覆盖的所有像素值的和        
            for (size_t i = r - HH; i <= r + HH; i++) {
                for (size_t j = c - HW; j <= c + HW; j++) {
                    sum += MakeBorder.at<uchar>(i, j);
                }
            }
            //求均值并赋值给相应位置的像素
            dst.at<uchar>(r - HH, c - HW) = sum / ksize.area();
            sum = 0;
        }
    }
}
运行结果及报错内容

img

我的解答思路和尝试过的方法

c < src.cols + HW;好像是这一句的问题,把src.cols + HW改成1500就可以显示了

我想要达到的结果

希望可以解答一下,为什么按照原来的写法不能遍历所有的列