Sam*_*dav 5 python opencv python-2.7
如何在python2.7中使用cv2创建一个新的过滤器并将其应用于图像?
例如:
kernel = np.array([[-1, -1, -1],
[-1, 4, -1],
[-1, -1, -1]])
Run Code Online (Sandbox Code Playgroud)
我是opencv的新手,所以如果你能解释那就好了.谢谢!
至于将自定义内核应用于给定图像,您可以简单地使用filter2D方法来提供自定义过滤器.您也可以复制以下代码以帮助您前进.但是当前过滤器的结果似乎有点奇怪:
import cv2
import numpy as np
# Create a dummy input image.
canvas = np.zeros((100, 100), dtype=np.uint8)
canvas = cv2.circle(canvas, (50, 50), 20, (255,), -1)
kernel = np.array([[-1, -1, -1],
[-1, 4, -1],
[-1, -1, -1]])
dst = cv2.filter2D(canvas, -1, kernel)
cv2.imwrite("./filtered.png", dst)
Run Code Online (Sandbox Code Playgroud)
输入图片:
输出图像:
编辑:根据@Dolphin建议的编辑,使用中心值为8的内核,在圆形二进制光盘的情况下将获得良好的结果.
您可以修改http://docs.opencv.org/3.1.0/d4/d13/tutorial_py_filtering.html 上的代码。这是一个 OpenCV 3 页面,但它适用于 OpenCV 2。
下面代码的唯一区别是内核的设置方式。
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('opencv_logo.png')
kernel = np.ones((3,3),np.float32) * (-1)
kernel[1,1] = 8
print(kernel)
dst = cv2.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Filters')
plt.xticks([]), plt.yticks([])
plt.show()
Run Code Online (Sandbox Code Playgroud)
请注意,我使用 8 作为中心像素而不是 4,因为使用 4 会使结果变暗太多。下面是上面代码的结果:
| 归档时间: |
|
| 查看次数: |
9197 次 |
| 最近记录: |