2017-05-29 70 views
0

我想在openCV中使用python打開和處理TIF圖像。我正在關注此代碼:如何從DFT(離散傅立葉變換)格式轉換爲灰度

Mat img = imread("my.tiff", CV_LOAD_IMAGE_GRAYSCALE); 

Mat ff_in; 
img.convertTo(ff_in, CV_32FC1, 1.0/255.0); // [0..1] range 

Mat ff_out; 
dft(ff_in, ff_out); 

Mat ff_gray; 
ff_out.convertTo(ff_gray, CV_8UC1, 255.0); 
imshow("lalala",ff_gray); 

我認爲上面的代碼是在C++中,我試圖找到它的Python替代品。下面是我得到了它從鏈接:link

目前,我把它轉化爲蟒蛇如下:

img = cv2.imread('test2.TIF', cv2.CV_LOAD_IMAGE_GRAYSCALE); 
img1 = np.float32(img) 
img2 = cv2.dft(img1); 

# What should I use HERE? Convert dft back to gray scale image 

cv2.imshow("Display window", img3); 
cv2.waitKey(0); 

的任何意見或建議表示高度讚賞。謝謝。

+0

原來調用['convertTo'(http://docs.opencv.org/3.1.0/d3/d63/classcv_1_1Mat。 html#a3f356665bb0ca452e7d7723ccac9a810)按255.0(第三個參數)縮放,並將結果轉換爲(無飽和)結果爲無符號的8位整數。第一位是微不足道的,用於飽和['np.clip'](https://docs.scipy.org/doc/numpy/reference/generated/numpy.clip.html),最後一部分是'np.uint8 '。例如'np.uint8(np.clip(img2 * 255,0,255))' –

+0

嗨,我添加了行'img3 = np.uint8(np.clip(img2 * 255,0,255))',但它不工作。生成的圖像看起來更像是一個dft。你知道在步驟1和步驟2中是否有其他問題(轉換爲float32和dft)? – matchifang

+0

那麼,你的'float32'轉換缺少'1.0/255.0'的縮放(即第二行應該是'img1 = np.float32(img)/ 255.0')。其餘的似乎相匹配。 –

回答

-1

我設法使用下面的代碼,將其轉換:

img = cv2.imread('test.TIF', cv2.CV_LOAD_IMAGE_UNCHANGED) # img.dtype = uint16 

img1 = np.float32(img/255.0) # img1.dtype = float32 

img2 = np.uint8(np.clip(img1 * 255, 0, 255)) # img2.dtype = uint8 

cv2.imshow("Display window", img2); 
cv2.imwrite('test.png', img2)