问题遇到的现象和发生背景
遇到的现象和发生背景,请写出第一个错误信息
输出的图像是一张几乎完全黑的图片(只有边缘没有做处理的地方显示出来)
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
void myboxfilter(int filter_size, Mat& image_input, Mat& image_output)
{
image_output = image_input.clone();
int k = (filter_size - 1) / 2;
Mat image_integral;
integral(image_input, image_integral, CV_32F);
Mat imageIntegralNorm;
normalize(image_integral, image_integral, 0, 255, NORM_MINMAX);
convertScaleAbs(image_integral, imageIntegralNorm);
//进行盒式滤波
for (int i = k; i < (image_input.rows - k); i++)
{
for (int j = k; j < (image_input.cols - k); j++)
{
int sum_r = 0, sum_g = 0, sum_b = 0;
Vec3b& pixel1 = imageIntegralNorm.at<Vec3b>(i - k, j - k);
Vec3b& pixel2 = imageIntegralNorm.at<Vec3b>(i - k, j + k);
Vec3b& pixel3 = imageIntegralNorm.at<Vec3b>(i + k, j - k);
Vec3b& pixel4 = imageIntegralNorm.at<Vec3b>(i + k, j + k);
sum_r = pixel4[2] + pixel1[2] - pixel2[2] - pixel3[2];
sum_g = pixel4[1] + pixel1[1] - pixel2[1] - pixel3[1];
sum_b = pixel4[0] + pixel1[0] - pixel2[0] - pixel3[0];
Vec3b& pixel5 = image_output.at<Vec3b>(i, j);
pixel5[2] = round(sum_r / (filter_size * filter_size));
pixel5[1] = round(sum_g / (filter_size * filter_size));
pixel5[0] = round(sum_b / (filter_size * filter_size));
}
}
}
int main()
{
Mat srcImage = imread("test.jpg");
if (!srcImage.data)
{
cout << "读取失败!\n";
system("pause");
return -1;
}
imshow("original image", srcImage);
Mat dstImage;
myboxfilter(3,srcImage, dstImage);
imshow("after myboxfilter", dstImage);
imwrite("box_filtering.jpg", dstImage);
waitKey(0);
return 0;
}
我想要达到的结果
输出经过盒式滤波的彩色图片