У меня есть оригинальное изображение:
Затем я читаю его, создаю PSF и размываю его в Matlab:
lenawords1=imread('lenawords.bmp');
%create PSF
sigma=6;
PSFgauss=fspecial('gaussian', 8*sigma+1, sigma);
%blur it
lenablur1=imfilter(lenawords1, PSFgauss, 'conv');
lenablurgray1=mat2gray(lenablur1);
PSFgaussgray = mat2gray(PSFgauss);
и я сохранил размытое изображение:
imwrite(lenablurgray1, 'lenablur.bmp');
Когда я отображаю в нем некоторые значения, я получаю
disp(lenablurgray1(91:93, 71:75))
0.5556 0.5778 0.6000 0.6222 0.6444
0.6000 0.6444 0.6667 0.6889 0.6889
0.6444 0.6889 0.7111 0.7333 0.7333
Затем я открываю это размытое изображение в OpenCV и отображаю егозначения с одинаковыми индексами:
Mat img = imread("lenablur.bmp");
for (int r = 91; r < 94; r++) {
for (int c = 71; c < 76; c++) {
cout << img.at<double>(r, c) << " ";
}
cout << endl;
}
cout << endl;
Полученный результат не соответствует значениям, указанным выше:
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Почему это так?
РЕДАКТИРОВАТЬ: img.at<unsigned int>(r, c)
дает
1903260029 1533437542 ...
2004318088 ...
....
Если я сохраняю размытое изображение в виде файла png:
imwrite(lenablurgray1, 'lenablur.png');
Затем, когда я читаю его в OpenCV:
Mat img = imread("lenablur.png");
img.convertTo(img, CV_64F);
затем img.at<double>(r, c)
дает
17 11 11 11 6
17 11 11 11 6
17 11 11 11 11
, который все еще не соответствует значениям из Matlab
EDIT2 : теперь я вижу, что значения неправильны дляядро.В Matlab я получаю
imwrite(PSFgaussgray, 'PSFgauss.bmp');
disp(PSFgaussgray(7:9, 7:9)*256)
.0316 .0513 .0812
.0513 ...
...
, тогда как в OpenCV:
Mat kernel = imread("PSFgauss.bmp");
cvtColor(kernel, kernel, cv::COLOR_BGR2GRAY);
kernel.convertTo(kernel, CV_64F);
for (int r = 6; r < 9 ; r++) {
for (int c = 6; c < 9; c++) {
cout << kernel.at<double>(r, c) << " ";
}
cout << endl;
}
cout << endl;
Полученный результат не соответствует значениям, указанным выше:
0 0 0
0 0 0
0 0 0