我正在尝试将3x3滤镜内核应用于图像。代码被解释为没有错误,但是我没有图像显示吗? 我该怎么办?
def main():
imgpath = "g.jpg"
img = cv2.imread(imgpath, 1)
import numpy as np
img = np.array(img, dtype=np.uint8)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
k = np.array(np.ones((11, 11), np.float64))/121
k = np.array(([2, 2, 2], [2, 3, 2], [2, 2, 2]), np.float64)
print(k)
output = cv2.filter2D(img, -1, k)
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.title('Original Image')
plt.subplot(1, 2, 2)
plt.imshow(output)
plt.title('Filtered Image')
plt.show()
if __name__ == "__main__":
main()
答案 0 :(得分:2)
除了缺少模块导入部分外,基本上,您的代码是正确的。
输出图像像白色一样空白,对不对? 根本原因是过滤后的值大于RGB范围0〜255。
应用滤波器时,应保持输出数据范围仍在0〜255之间。 就是
k = np.array(([2, 2, 2], [2, 3, 2], [2, 2, 2]), np.float64)
k = k / 19
因此,对于一个简单的平滑过滤器,它将是
k = np.array(([1, 1, 1], [1, 1, 1], [1, 1, 1]), np.float64)
k = k / 9
Sobel(水平)怎么样?
k = np.array(([1, 0, -1], [2, 0, -2], [1, 0, -1]), np.float64)
是的,将k保持为k。
重新开始,建议您也粘贴您使用的导入部件。它将帮助其他人知道您的问题不是由缺少导入引起的:
import cv2
import matplotlib.pyplot as plt
import numpy as np