我正在做一个应该做以下事情的项目: “制作一个可以在图像中找到对角线边缘的Python程序。 输入:灰度图像 输出:对角线边缘为白色(255)和其余像素的二进制图像 黑色(0)”
这是
这是我的
这不是我要找的东西,我想我找到了问题。我的np.array(SobelKernel)乘以pixelValue(使用打印检查)时不使用负值。任何想法如何解决?
这是我的代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('LENNA.JPG')
height = img.shape[1]
width = img.shape[0]
out = np.zeros(img.shape, np.uint8)
SobelKernel = np.array([[2, 1, 0],
[1, 0, -1],
[0, -1, -2]], np.int8)
for y in range(1, height-1):
for x in range(1, width-1):
temp = 0
for j in range(2):
for k in range(2):
pixValue = img[x+ j - 1][y + k - 1]
kernelValue = SobelKernel[j][k]
temp = temp + pixValue*kernelValue
#print(Sobelkernel[j][k])
out[x, y] = temp
cv2.imshow('test', out)
cv2.waitKey(0)
cv2.destroyAllWindows()
答案 0 :(得分:1)
问题是您生成的图像可能超出int8
的边界。
将结果保存到out = np.zeros(img.shape, np.int16)
中,然后处理低于0
或高于255
的值。
然后,在处理超出范围的值之后,将数组转换回np.unit8
,然后再保存(否则,它将被视为16位图像,而不是8位图像)。