如何解决为什么 cv2.filter2D() 没有按预期工作?
我正在尝试获得模糊效果。我知道我可以通过使用 cv2.blur() 来做到这一点,但是当我使用 cv2.filter2D() 时,它似乎效果不佳。
import cv2
import numpy as np
img = cv2.imread("img.jpeg")
bimg = cv2.blur(img,(5,5))
k3 = np.ones((5,5),np.float32)
kimg = cv2.filter2D(img,-1,k3)
cv2.imshow("O",img)
cv2.imshow("B",bimg)
cv2.imshow("K",kimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
谢谢。
解决方法
我们不想改变图像的平均值,所以需要保证核的和为1。
代替 k3 = np.ones((5,5),np.float32)
,使用:
k3 = np.ones((5,np.float32) / 25
为什么使用 ones(5,5)
内核会产生白色图像?
例如假设img
的所有像素的值等于100
。
对每个像素应用cv2.filter2D
(离散二维卷积):
kimg[y,x] = img[y-2,x-2]*1 + img[y-2,x-1]*1 + img[y-2,x]*1 + ... + img[y+2,x+2]
= 100*1 + 100*1 + ... + 100*1
= 100*25
= 2500
。
(kimg
的所有像素的值将是 2500
)。
由于 kimg
的类型是 uint8
,所有大于 255 的值都被裁剪为 255,所以 2500 被裁剪为 255,255 应用白色。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。