当运行均值滤波后的图像只显示了一半,另一半显示为黑色
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;
}
}
}
c < src.cols + HW;好像是这一句的问题,把src.cols + HW改成1500就可以显示了
希望可以解答一下,为什么按照原来的写法不能遍历所有的列