plt.imshow()将灰度图像进行彩色映射
https://blog.youkuaiyun.com/missyougoon/article/details/89510188tong
图片是灰度图像 (通道数为1),为什么可视化的图片是彩色的?关键在于plt.imshow()
使用 plt.imshow() 方法进行画图,该方法有个非常实用的功能,可以将灰度图像按照灰度值的高低映射成彩色图像,这对于人类的视觉来说再友好不过了。既然要映射成彩色,那总得有一系列彩色映射表吧,这就是官方文档上说到的colormap。
如果想要显示原本的灰度图像,可以用如下代码
# 这里必须加 cmap='gray' ,否则尽管原图像是灰度图(下图1),但是显示的是伪彩色图像(下图2)(如果不加的话)
plt.imshow(img,cmap='gray')
PyCharm中matplotlib.pyplot.imshow()无法绘图
https://blog.youkuaiyun.com/qq_28869927/article/details/83316023
matplotlib.pyplot as plt
# 直接使用plt.imshow无法显示图片,需要导入pylab包
import pylab
plt.imshow(image_array, cmap='gray', interpolation='None')
# plt.imshow(np.array(img))
pylab.show()
python 读取并显示图片的两种方法
https://www.cnblogs.com/yinxiangnan-charles/p/5928689.html
解决使用 plt.savefig 保存图片时一片空白
https://blog.youkuaiyun.com/u010099080/article/details/52912439
保存的图片一片空白,其实产生这个现象的原因很简单:在 plt.show() 后调用了 plt.savefig() ,在 plt.show() 后实际上已经创建了一个新的空白的图片(坐标轴),这时候你再 plt.savefig() 就会保存这个新生成的空白图片。
解决办法
(1)在plt.show()之前调用plt.savefig()
(2) 画图的时候获取当前图像(这一点非常类似于 Matlab 的句柄的概念):
# gcf: Get Current Figure
fig = plt.gcf()
plt.show()
fig.savefig('test.png', dpi=100)
dpi是设置清晰度的
matplotlib 使用 plt.savefig() 去除图片旁边的空白区域
https://blog.youkuaiyun.com/jifaley/article/details/79687000
https://blog.youkuaiyun.com/xull88619814/article/details/82052894
发现matplotlib使用plt.savefig()保存的图片周围有一圈空白。那么如何去掉该空白呢?
首先,关闭坐标轴显示:
plt.axis('off')
但是,这样只是关闭显示而已,透明的坐标轴仍然会占据左下角位置,导致输出的图片偏右。
要想完全去掉坐标轴,需要改为以下代码:
plt.axis('off')
fig = plt.gcf()
fig.set_size_inches(7.0/3,7.0/3) #dpi = 300, output = 700*700 pixels
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)
plt.margins(0,0)
fig.savefig(out_png_path, format='png', transparent=True, dpi=300, pad_inches = 0)
即可完成去掉空白。
注:如果不采用 subplot_adjust + margin(0,0),而是在fig.savefig()的参数中添加bbox_inches = 'tight',也可以达到去除空白的效果; 但是,这样会导致对图片输出大小的设置失效。
plt.savefig('hah.png',bbox_inches='tight',dpi=fig.dpi,pad_inches=0.0)
其中 bbox_inches = 'tight' 可以去除坐标轴占用的空间(如果只是set_visiable = False,只能不显示,但空间还占用)
dpi指定为原图的dpi,控制保存图片的质量/分辨率
pad_inches = 0 这句是重点,去除所有白边
以下代码用于实现SaliencyMap
# file_path = '/home/utkarsh/Desktop/togrey/Test.txt'
# with open(file_path, encoding='utf-8') as file_obj:
# contents = file_obj.read()
# print(contents.rstrip())
import cv2
import re
import numpy as np
import skimage
import saliency
import cv2
from glob import glob
import os
from skimage.io import imread, imsave
from PIL import Image
import matplotlib.pyplot as plt
import pylab
file_path = '/home/utkarsh/Desktop/togrey/Test3.txt'
cv2.imwrite('/home/utkarsh/Desktop/togrey/blankimage.png', np.zeros((1080,1920)))
image = cv2.imread("blankimage.png")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
print(image.shape)
im = cv2.imread("/home/utkarsh/Desktop/togrey/frame003.png")
resized_im = im.copy()
resized_im = cv2.resize(resized_im, (1920, 1080))
print(resized_im.shape)
cv2.imwrite('/home/utkarsh/Desktop/togrey/Resized_im.png', resized_im)
file = open(file_path)
while True:
text = file.readline()
if not text:
break
result = [int(d) for d in re.findall(r'-?\d+', text)]
if(len(result)>2):
center = (result[0],result[1])
cv2.circle(image, center, 5, (255, 0, 0), -1)
cv2.imshow("Circle", image)
cv2.waitKey(0)
cv2.imwrite('/home/utkarsh/Desktop/togrey/blankimage.png', image)
dst=skimage.filters.gaussian(image, sigma=30, mode='reflect', truncate=2.0)
# dst = saliency.center_bias(dst, 1.5)
print("-"*50)
print(dst.shape)
cv2.imshow("Saliencymap", dst)
cv2.waitKey(0)
cv2.imwrite('/home/utkarsh/Desktop/togrey/Saliencymap.png', (dst*255))
path1 = '/home/utkarsh/Desktop/togrey/Resized_im.png'
path2 = '/home/utkarsh/Desktop/togrey/Saliencymap.png'
path3 = '/home/utkarsh/Desktop/togrey/SaliencymapFakeRGB.png'
origimg = Image.open(path1)
origimg = origimg.convert("RGB")
saliencymap = Image.open(path2)
plt.imshow(np.array(saliencymap))
plt.axis('off')
print("-"*100)
print(np.array(saliencymap).shape)
height, width = np.array(saliencymap).shape
# gcf : Get Current Figure 画图的时候获取当前图像
fig = plt.gcf()
dpi_f = fig.dpi / 100
fig.set_size_inches(width/100.0/dpi_f,height/100.0/dpi_f) #dpi = 100.0, output = height*width pixels
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)
plt.margins(0,0)
out_png_path = '/home/utkarsh/Desktop/togrey/SaliencymapFakeRGB.png'
fig.savefig(out_png_path, format='png', transparent=True, dpi=fig.dpi, pad_inches = 0)
# 保存matplotlib画出的图像
# plt.savefig('/home/utkarsh/Desktop/togrey/SaliencymapFakeRGB.png')
# pylab.show()
sali_fakergb = Image.open(path3)
print(np.array(sali_fakergb).shape)
sali_fakergb = sali_fakergb.convert("RGB")
print("-"*10)
print(np.array(sali_fakergb).shape)
cv2.imshow("1", np.array(origimg))
cv2.waitKey(0)
cv2.imshow("2", np.array(sali_fakergb))
cv2.waitKey(0)
overlay_img = Image.blend(origimg, sali_fakergb, 0.5)
overlay_img.save('/home/utkarsh/Desktop/togrey/Heatmap.png')