2017-05-29 69 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)