我的问题与此链接完全相同。但是,我想应用模糊,仅使用GaussianBlur函数。虽然提供的答案使用自己的代码来应用它。
openCV Gaussian blur/smoothing of 3D Matrix/Histogram
我写了以下代码。这里直方图的维度是tbucket xbucket ybucket。首先,我为所有tbucket创建了Matrix temp_blur,并在尺寸xbucket和尺寸ybucket上单独应用GaussianBlur函数。接下来,我为所有xbucket创建了用于tbucket * ybucket的Matrix,并在尺寸tbucket上应用了GaussianBlur函数。这是正确的方法吗?
void Histogram::blur_(int sigma1,int sigma2){
Mat temp_blur;
for(int i=0;i<tbucket;i++){
temp_blur=Mat(xbucket,ybucket,CV_32F);
for(int j=0;j<xbucket;j++){
for(int k=0;k<ybucket;k++){
temp_blur.at<float>(j,k)=values[i][j][k];
}
}
GaussianBlur(temp_blur,temp_blur,Size(1,2*sigma1+1),sigma1,sigma1); //make sure its correct, 2D broken to 1D
GaussianBlur(temp_blur,temp_blur,Size(2*sigma2+1,1),sigma2,sigma2);
for(int j=0;j<xbucket;j++){
for(int k=0;k<ybucket;k++){
values[i][j][k]=temp_blur.at<float>(j,k);
}
}
}
for(int i=0;i<xbucket;i++){
temp_blur=Mat(tbucket,ybucket,CV_32F);
for(int j=0;j<tbucket;j++){
for(int k=0;k<ybucket;k++){
temp_blur.at<float>(j,k)=values[j][i][k];
}
}
GaussianBlur(temp_blur,temp_blur,Size(1,2*sigma1+1),sigma1,sigma1); //make sure its correct, 2D broken to 1D
GaussianBlur(temp_blur,temp_blur,Size(2*sigma2+1,1),sigma2,sigma2);
for(int j=0;j<tbucket;j++){
for(int k=0;k<ybucket;k++){
values[j][i][k]=temp_blur.at<float>(j,k);
}
}
}