2015-02-11 176 views
0

我在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之中,但我很困惑,因爲他們本身顯示ok了。對不起,我的屏幕截圖切斷了「一起」窗口。據我所知,我使用灰度是因爲該dct只能在一個通道上工作。

回答

1

的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上不同模糊濾鏡的效果。

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

相關問題