gpt4 book ai didi

python - 为什么我的灰度图像显示为黑白?

转载 作者:行者123 更新时间:2023-12-02 17:48:52 28 4
gpt4 key购买 nike

我在opencv中做一些测试,观察模糊和离散余弦变换的结果(每个循环增加内核大小)。我想在同一帧中显示图像和 dct 结果,以便进行比较。

当我将它们显示在单独的框架中时,它们看起来不错。但是当我使用 np.hpstack 或 np.concatenate 来显示模糊图像和 dct 时,灰度图像变得非常阈值。我可以看到内核大小为 1 的一点黑色,但在那之后它在我的循环中几乎变白了。

import cv2
import numpy as np
img = cv2.imread('lena.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

for i in xrange(1,31,2):
median_blur = cv2.medianBlur(img,i)
string = 'median_blur : kernel size - '+str(i)
imf = np.float32(median_blur)/255.0 # float conversion/scale
dst = cv2.dct(imf) # the dct
img2 = np.uint8(dst)*255.0 # convert back
cv2.putText(median_blur,string,(20,20),cv2.FONT_HERSHEY_COMPLEX_SMALL,1,(0,0,0))
vis = np.hstack([median_blur,img2])

cv2.imshow('Blur',median_blur)
cv2.imshow('dct',img2)
cv2.imshow('together', vis)
cv2.waitKey(500)

enter image description here

我认为这一定与 median_blur 和 img2 的维度不同有关,但我很困惑,因为它们本身显示正常。抱歉,我的屏幕截图截断了一些“一起”窗口。我正在使用灰度,因为据我所知,dct 一次只能在一个 channel 上工作。

最佳答案

dct 结果仍然是 float64,因为它乘以 255.0 而不是 255。

通过查看 numpy 数组的维度和数据类型来诊断问题:

print median_blur.shape, median_blur.dtype
print img2.shape, img2.dtype
print vis.shape, vis.dtype

最初我有:
(512, 512) uint8
(512, 512) float64
(512, 1024) float64

然后更改后 img2 = np.uint8(dst)*255.0img2 = np.uint8(dst)*255我有:
(512, 512) uint8
(512, 512) uint8
(512, 1024) uint8

enter image description here

编辑:

最后一件事。我不想完全使用除以 255 和 *255 !消除它们给了我想要的 dct。现在您可以漂亮地看到不同模糊滤镜对 dct 的效果。
imf = np.float32(blur)  # float conversion (NO scale)
dst = cv2.dct(imf) # the dct
img2 = np.uint8(dst) # convert back to unsigned 8bit image

enter image description here

关于python - 为什么我的灰度图像显示为黑白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28448276/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com