我正在尝试通过应用不锐化 mask 来锐化图像,即用高斯模糊图像减去图像,然后将差异添加回图像。
这是我运行的代码:
img = cv2.imread('redhat.jpg')
gauss = cv2.GaussianBlur(img,(7,7),0)
diff = img - gauss
sharp = img + diff
cv2_imshow(img)
cv2_imshow(sharp)
原图:
锐利:
如果我运行:而不是上面的代码:
img = cv2.imread('redhat.jpg')
gauss = cv2.GaussianBlur(img,(7,7),0)
sharp = cv2.addWeighted(img, 2, gauss, -1, 0)
cv2_imshow(img)
cv2_imshow(sharp)
然后我就得到了正确的清晰图像:
有人可以向我解释为什么我在第一个代码中得到奇怪的结果吗?根据我的理解,这两段代码都在执行相同的数学运算。
最佳答案
在 diff = img - gauss
中,减法产生负值,但两个输入的类型为 uint8,因此运算结果被强制为相同类型,该类型不能容纳负值.
您必须将其中一张图像转换为签名类型才能正常工作。例如:
gauss = cv2.GaussianBlur(img,(7,7),0)
diff = img.astype(np.int_) - gauss
sharp = np.clip(img + diff, 0, 255).astype(np.uint8)
使用cv2.addWeighted()
效率更高。
关于python - 在图像锐化中进行相同操作后得到不同的图像阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75258632/