Python np数组无法读取我的负值

时间:2018-11-06 10:35:25

标签: python

我正在做一个应该做以下事情的项目: “制作一个可以在图像中找到对角线边缘的Python程序。 输入:灰度图像 输出:对角线边缘为白色(255)和其余像素的二进制图像 黑色(0)”

这是original picture

这是我的current output

这不是我要找的东西,我想我找到了问题。我的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()

1 个答案:

答案 0 :(得分:1)

问题是您生成的图像可能超出int8的边界。

将结果保存到out = np.zeros(img.shape, np.int16)中,然后处理低于0或高于255的值。

然后,在处理超出范围的值之后,将数组转换回np.unit8,然后再保存(否则,它将被视为16位图像,而不是8位图像)。