如何使用python2.7中的cv2创建一个新过滤器并将其应用于图像?
例如:
kernel = np.array([[-1, -1, -1],
[-1, 4, -1],
[-1, -1, -1]])
我是opencv的新手,所以如果你能解释一下,那就太棒了。谢谢!
答案 0 :(得分:8)
就将自定义内核应用于给定图像,您只需使用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)
输入图片:
输出图片:
编辑:根据@Dolphin建议的编辑,使用中心值为8的内核,在圆形二进制光盘的情况下会获得良好的效果。
答案 1 :(得分:4)
您可以在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()
请注意,我使用8作为中心像素而不是4,因为使用4会使结果变暗太多。以下是上述代码的结果: