代码拉取完成,页面将自动刷新
同步操作将从 宋佳蓁/Gaussianfilter 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "openmp.h"
/**
* 按二维高斯函数实现高斯滤波
* @param src
* @param dst
* @param window
*/
void ompGaussianFilter(Mat &src, Mat &dst, Mat window) {
int hh = (window.rows - 1) / 2;
int hw = (window.cols - 1) / 2;
dst = Mat::zeros(src.size(), src.type());
//边界填充
Mat newSrc;
copyMakeBorder(src, newSrc, hh, hh, hw, hw, BORDER_REPLICATE);//边界复制
//高斯滤波
double sum[3] = {0};
#pragma omp parallel for simd num_threads(2) default(none) shared(newSrc, window, hh, hw, dst) private(sum) schedule(dynamic)
for (int i = hh; i < newSrc.rows - hh; ++i) {
for (int j = hw; j < newSrc.cols - hw; ++j) {
sum[0] = 0;
for (int r = -hh; r <= hh; ++r) {
for (int c = -hw; c <= hw; ++c) {
if (newSrc.channels() == 1) {
// sum[0] = sum[0] + newSrc.at<uchar>(i + r, j + c) * window.at<double>(r + hh, c + hw);
sum[0] = sum[0] + newSrc.ptr<uchar>(i + r)[j + c] * window.ptr<double>(r + hh)[c + hw];
}
}
}
for (int k = 0; k < newSrc.channels(); ++k) {
if (sum[k] < 0)
sum[k] = 0;
else if (sum[k] > 255)
sum[k] = 255;
}
if (newSrc.channels() == 1) {
dst.at<uchar>(i - hh, j - hw) = static_cast<uchar>(sum[0]);
}
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。