如何在python2.7中使用cv2创建一个新的过滤器并将其应用于图像?

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的新手,所以如果你能解释那就好了.谢谢!

Zda*_*daR 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)
Run Code Online (Sandbox Code Playgroud)

输入图片:

在此输入图像描述

输出图像:

在此输入图像描述

编辑:根据@Dolphin建议的编辑,使用中心值为8的内核,在圆形二进制光盘的情况下将获得良好的结果.


Bul*_*ull 5

您可以修改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 会使结果变暗太多。下面是上面代码的结果:

在此处输入图片说明