У меня есть изображение:
В Matlab у меня есть
BW=imread('lenna.bmp');
N=3;
kernel = ones(N) / (N ^ 2);
blurry = conv2(im2double(BW), kernel, 'same');
blurry(1:5,1:5)
Вывод: ans =
0.2405 0.3891 0.4349 0.4514 0.4514
0.3612 0.5839 0.6519 0.6763 0.6771
0.3603 0.5847 0.6514 0.6776 0.6754
0.3621 0.5869 0.6523 0.6784 0.6767
0.3089 0.5120 0.5904 0.6309 0.6418
В C ++ я хочу получить те же результаты, что и код Matlab выше, поэтому я попытался
std::string BW0str = "lenna.bmp";
cv::Mat BW0mat = cv::imread(BW0str, cv::IMREAD_GRAYSCALE);
BW0mat.convertTo(BW0mat, CV_64FC1, 1.0 / 255.0);
int N = 3;
cv::Mat kernel = cv::Mat(N, N, CV_64FC1, cv::Scalar(1.0/(N *N)));
cv::Mat convMat;
cv::filter2D(BW0mat, convMat, BW0mat.depth(), kernel);
//output some values
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
std::cout << convMat.at<double>(i, j)<<" ";
}
std::cout << "\n";
}
//output:
.5608 .5830 .6523 .6776 .6771
.5621 .5834 .6519 .6763 .6771
.5599 .5847 .6514 .6776 .6754
.5617 .5869 .6523 .6784 .6767
.4828 .5120 .5904 .6309 .6418
.3577 .3834 .4588 .5150 .5516
Похоже, что результат C ++ совпадает с результатом Matlab, начиная со 2-й строки 3-й столбец. Однако я хочу, чтобы результаты соответствовали каждой записи. Можно ли это сделать в OpenCV в C ++?