【发布时间】:2021-12-02 17:53:44
【问题描述】:
我正在尝试编写一个用于图像处理的简单卷积循环。当内核加起来为 1 即平滑滤波器时,它似乎工作正常。
但是当使用边缘检测过滤器时,会出现奇怪的值:
for i in range(img.shape[1]):
index = []
for j in range(order):
index.append(i+j)
array_aux=img_processed[:,index]
img_final[:,i]=np.sum(array_aux*kernel_x,axis=1)
我正在应用一个 1D 内核,该内核扩展到图片的整个高度,并通过将该扩展内核与所需的列相乘并将所有值相加来进行卷积。我正在使用 cv2.BORDER_REFLECT_101 填充:
Image: Kernel: Final Image:
[ 85 85 85 85 85] [ 1 0 -1] [ 0 0 0 0 0]
[ 85 85 85 85 85] [ 1 0 -1] [ 0 0 0 0 0]
[ 84 84 84 84 84] [ 1 0 -1] [ 0 0 0 0 0]
... ... ...
[106 136 179 170 152] [ 1 0 -1] [ 0 183 222 27 6]
[113 129 172 175 153] [ 1 0 -1] [ 0 197 210 19 30]
[123 125 168 183 156] [ 1 0 -1] [ 0 211 198 12 57]
如您所见,虽然前三行似乎没问题,但后三行是错误的,因为预期为负数。怎么回事?
【问题讨论】:
-
图像和内核的dtype是什么?
-
内核是float64,img是uint8,这似乎是问题所在。我如何一起计算它们?抱歉,python 新手
标签: python opencv image-processing convolution