Opencv5:对【冒泡排序实现中值滤波】的优化
(1)前文【冒泡排序实现中值滤波】:
https://blog.csdn.net/weixin_39504171/article/details/95171285
(2)优化思路:
进行优化的是提取容器内排序第index的像素灰度值部分算法。
之前的实现方法是采用冒泡排序对当前容器内像素灰度值进行排序,循环至排序到第index元素时停止后序排序工作,并记录当前灰度值。
优化后的实现思路是对进行排序的灰度值以类似灰度直方图形式进行统计,灰度统计后从0至255对位于当前灰度值的像素个数进行累加技术,计数等于(或超过)指定index时停止,当前灰度即为所求灰度值。
(3)实现代码:
int tuple_graval_index(vector<int> v, int index)
{
//[1]建立统计灰度情况的数组
int grayval[256] = {0};
//[2]统计灰度情况
for (int i = 0; i < v.size(); i++)
{
grayval[v[i]] += 1;
}
//[3]提取第index的灰度的值
int grayindex = 0;
int gray = 0;
for (int i = 0; i < 256; i++)
{
grayindex += grayval[i];
if (grayindex >= index)
{
gray = i;
break;
}
}
return gray;
}
用于替换前文中中值滤波函数调用的bubble_index()函数。
(4)运行结果:
运行速度与前文算法相比有大幅提高,处理效果相同。
如后续有其他优化方法,会进行更新。