Opencv-快速的图像边缘滤波算法

快速的图像边缘滤波算法

知识点

快速的图像边缘滤波算法
高斯双边模糊与mean shift均值模糊两种边缘保留滤波算法,都因为计算量比较大,无法实时实现图像边缘保留滤波,限制了它们的使用场景,OpenCV中还实现了一种快速的边缘保留滤波算法。高斯双边与mean shift均值在计算时候使用五维向量是其计算量大速度慢的根本原因,该算法通过等价变换到低纬维度空间,实现了数据降维与快速计算。

在这里插入图片描述
OpenCV API函数为:
void cv::edgePreservingFilter(
InputArray src,
OutputArray dst,
int flags = 1,
float sigma_s = 60,
float sigma_r = 0.4f
)

Python:
dst = cv.edgePreservingFilter( src[, dst[, flags[, sigma_s[, sigma_r]]]])

其中sigma_s的取值范围为0~200, sigma_r的取值范围为0~1
当sigma_s取值不变时候,sigma_r越大图像滤波效果越明显
当sigma_r取值不变时候,窗口sigma_s越大图像模糊效果越明显
当sgma_r取值很小的时候,窗口sigma_s取值无论如何变化,图像双边滤波效果都不好!

python代码

import cv2 as cv
import numpy as np
import time

src = cv.imread("C:/Users/qqxd/Desktop/opencvcode/images/example.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
h, w = src.shape[:2]
#计算程序运行时间
start = time.clock()
dst = cv.edgePreservingFilter(src, sigma_s=100, sigma_r=0.4, flags=cv.RECURS_FILTER)
end = (time.clock()-start)
print("running time is %f" % (end))
result = np.zeros([h, w*2, 3], dtype=src.dtype)
result[0:h,0:w,:] = src
result[0:h,w:2*w,:] = dst
cv.imshow("result", result)
# cv.imwrite("D:/result.png", result)


cv.waitKey(0)
cv.destroyAllWindows()

c++代码

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int artc, char** argv) {
	Mat src = imread("C:/Users/qqxd/Desktop/opencvcode/images/example.png");
	if (src.empty()) {
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("input", WINDOW_AUTOSIZE);
	imshow("input", src);

	Mat dst;
	double tt = getTickCount();
	edgePreservingFilter(src, dst, 1, 60, 0.44);
	//计算程序运行时间
	double end = (getTickCount() - tt) / getTickFrequency();
	printf("time consume : %f\n ", end);
	imshow("result", dst);

	waitKey(0);
	return 0;
}

运行结果如下:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值