使用 OpenCvSharp4.6 实现的代码 差分滤波 void Caliper::DifferenceFilter(const size_t &_filterSize) { //1. 构造滤波核: [-1,-1...0...1,1] std::vector<int> filter(2 * _filterSize + 1, 1); for (size_t i = 0; i < _filterSize; ++i) { filter[i] = -1; } filter[_filterSize] = 0; //2. 滤波核滑动滤波,逐一相乘求和(省去反转的一维卷积) pathPixelValueAfterFilter.clear(); pathPixelValueAfterFilter.assign(pathPixelValue.begin(), pathPixelValue.end()); for (size_t j = _filterSize; j < pathPixelValue.size() - _filterSize; ++j) { double sum = 0.0; for (size_t i = 0; i < filter.size(); ++i) { sum += pathPixelValue.at(j - _filterSize + i) * filter.at(i); } pathPixelValueAfterFilter.at(j) = static_cast<int>(sum); } };//DifferenceFilter
时间: 2024-02-10 15:33:02 浏览: 61
digital_caliper_interface_pcb_gauge.zip_单片机开发_C/C++_
这段代码实现了差分滤波(Difference Filter),使用了 OpenCvSharp4.6 库。具体实现过程如下:
1. 构造滤波核,该滤波核是一个长度为 2*_filterSize+1 的一维向量,向量中心是 0,左边是 -1,右边是 1。
2. 对输入的数据 pathPixelValue 进行滤波,滤波过程是滑动滤波,即从第 _filterSize 个元素开始,逐一将滤波核与数据相乘,再求和,得到滤波后的结果,将结果存储在 pathPixelValueAfterFilter 向量中。
需要注意的是,在滤波过程中,为了避免在边缘处出现“越界”的情况,只对 pathPixelValue 的第 _filterSize 到第 pathPixelValue.size() - _filterSize 个元素进行滤波。
阅读全文