我编写了以下代码来使用 OpenCV 中的 NORM_L1 标准化图像。但输出图像只是黑色。怎么解决这个问题呢?
import cv2 import numpy as np import Image img = cv2.imread('img7.jpg') gray_image = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) a = np.asarray(gray_image) dst = np.zeros(shape=(5,2)) b=cv2.normalize(a,dst,0,255,cv2.NORM_L1) im = Image.fromarray(b) im.save("img50.jpg") cv2.waitKey(0) cv2.destroyAllWindows()
问题在于 cv2.normalize() 函数的使用方式。您没有正确处理归一化后的结果。cv2.normalize() 函数会修改传递给它的目标数组,而您在这里传递了一个全零数组 dst 作为目标数组,结果没有保存。
cv2.normalize()
dst
这里有几种解决方案:
不使用 cv2.normalize() 函数,而是使用 NumPy 的 np.clip() 函数手动归一化图像像素值。这样可以更容易地控制图像的范围。
np.clip()
通过将目标数组设置为 None,使 cv2.normalize() 函数直接修改输入数组,并确保在保存图像之前将图像归一化到正确的范围。
以下是第二种解决方案的代码示例:
import cv2 img = cv2.imread('img7.jpg') gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 直接修改输入数组并归一化到 0 到 255 的范围 cv2.normalize(gray_image, gray_image, 0, 255, cv2.NORM_L1) # 将归一化后的图像保存为 JPEG 文件 cv2.imwrite("img50.jpg", gray_image) # 等待按键并关闭所有 OpenCV 窗口 cv2.waitKey(0) cv2.destroyAllWindows()
这个版本的代码应该能够正确地归一化图像并保存归一化后的结果。