我使用以下代码计算图像的DCT:
img = cv2.imread(imgName,0)
imf = np.float32(img)
dctimg = cv2.dct(imf)
问题在于使用OpenCV' imwrite
功能保存图像时,我获得了所需的输出。
cv2.imwrite('output-dct.png',dctimg)
但是使用matplotlib作为plt.imshow(dctimg, cmap='gray')
进行保存时,我会得到一张完全黑的图像
据我所知,OpenCV正在将其转换为8位图像。所以我尝试使用规范化
来做同样的事情cv2.normalize(orgDct, dctimg,alpha=0, beta=1,
norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
dctimg = np.uint8(dctimg)*255
plt.imshow(dctimg, cmap='gray')
答案 0 :(得分:2)
我使用了vmin
函数的vmax
和imshow
参数。这使DCT图像与OpenCV的imwrite
等效。
所以程序看起来像这样:
img = cv2.imread(imgName,0)
imf = np.float32(img)
dctimg = cv2.dct(imf)
plt.imshow(dctimg, cmap='gray', vmin = 0, vmax = 255)
答案 1 :(得分:0)
你犯了一个错误:
dctimg = np.uint8(dctimg)*255
应该是
dctimg = np.uint8(dctimg*255)
因为假设您的dctimg的值介于0.0和1.0之间,您的代码只会将最高值转换为1,其余值转换为0,然后将结果乘以255 - 产生0"几乎无处不在& #34 ;.
另外,请确保您的DCT实际上只产生正值。我不认为通常就是这种情况。