canny_filter
时间: 2023-07-22 12:14:51 浏览: 86
EX_3.zip_c builder canny_filter C++ opencv_in_opencv canny
`canny_filter` 是一个函数,根据输入的图像进行 Canny 边缘检测,并返回边缘图像。
```python
import cv2
import numpy as np
def canny_filter(img):
blurred_img = cv2.blur(img, ksize=(5, 5))
med_val = np.median(blurred_img)
low_thres = int(max(0, 0.5 * med_val))
high_thres = int(min(255, 2.0 * med_val))
edges = cv2.Canny(img, low_thres, high_thres)
return edges
```
函数的输入参数 `img` 是一个图像,可以是灰度图像或彩色图像。接下来的步骤是:
1. `blurred_img = cv2.blur(img, ksize=(5, 5))`:对输入的图像进行模糊处理,使用一个 5x5 的卷积核进行均值滤波,以减少噪声的影响。
2. `med_val = np.median(blurred_img)`:计算模糊后图像的中值,用于后续计算阈值。
3. `low_thres = int(max(0, 0.5 * med_val))` 和 `high_thres = int(min(255, 2.0 * med_val))`:根据中值计算 Canny 边缘检测算法的低阈值和高阈值。低阈值通常为中值的一半,高阈值为中值的两倍。确保阈值在 0 到 255 之间,并将结果转换为整数。
4. `edges = cv2.Canny(img, low_thres, high_thres)`:使用计算得到的低阈值和高阈值在输入图像上执行 Canny 边缘检测算法,返回一个包含边缘信息的二值图像。
5. 最后,函数返回边缘检测得到的结果图像 `edges`。
这个函数可以应用于任何图像,以便找到图像中的边缘信息。
阅读全文