小能豆

OpenCV 中的标准化图像会产生黑色图像吗?

python

我编写了以下代码来使用 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()

阅读 70

收藏
2024-05-15

共1个答案

小能豆

问题在于 cv2.normalize() 函数的使用方式。您没有正确处理归一化后的结果。cv2.normalize() 函数会修改传递给它的目标数组,而您在这里传递了一个全零数组 dst 作为目标数组,结果没有保存。

这里有几种解决方案:

  1. 不使用 cv2.normalize() 函数,而是使用 NumPy 的 np.clip() 函数手动归一化图像像素值。这样可以更容易地控制图像的范围。

  2. 通过将目标数组设置为 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()

这个版本的代码应该能够正确地归一化图像并保存归一化后的结果。

2024-05-15