python热量图和灰度图(python图片灰度处理)

发布时间:2022-11-11

本文目录一览:

  1. '求助'Python怎么判断图片是否为灰度图
  2. 怎么用python显示一张图片
  3. python matlab画灰度图统计图?
  4. Python热力图绘制方法—新手教程
  5. 怎么用python进行简单的图像处理

'求助'Python怎么判断图片是否为灰度图

这里判断是否为灰度图的标准是:每一个像素所对应的R、G、B的值是否相等。

def is_color_image(url):
    im = Image.open(url)
    pix = im.convert('RGB')
    width = im.size[0]
    height = im.size[1]
    oimage_color_type = "Grey Image"
    is_color = []
    for x in range(width):
        for y in range(height):
            r, g, b = pix.getpixel((x, y))
            r = int(r)
            g = int(g)
            b = int(b)
            if (r == g) and (g == b):
                pass
            else:
                oimage_color_type = 'Color Image'
                return oimage_color_type

怎么用python显示一张图片

在 Python 中除了用 OpenCV,也可以用 matplotlib 和 PIL 这两个库操作图片。本人偏爱 matplotlib,因为它的语法更像 MATLAB。

一、matplotlib

1. 显示图片

import matplotlib.pyplot as plt  # plt 用于显示图片
import matplotlib.image as mpimg  # mpimg 用于读取图片
import numpy as np
lena = mpimg.imread('lena.png')  # 读取和代码处于同一目录下的 lena.png
# 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理
lena.shape  # (512, 512, 3)
plt.imshow(lena)  # 显示图片
plt.axis('off')  # 不显示坐标轴
plt.show()

2. 显示某个通道

# 显示图片的第一个通道
lena_1 = lena[:, :, 0]
plt.imshow('lena_1')
plt.show()
# 此时会发现显示的是热量图,不是我们预想的灰度图,可以添加 cmap 参数,有如下几种添加方法:
plt.imshow('lena_1', cmap='Greys_r')
plt.show()
img = plt.imshow('lena_1')
img.set_cmap('gray')  # 'hot' 是热量图
plt.show()

3. 将 RGB 转为灰度图

def rgb2gray(rgb):
    return np.dot(rgb[..., :3], [0.299, 0.587, 0.114])
gray = rgb2gray(lena)
# 也可以用 plt.imshow(gray, cmap = plt.get_cmap('gray'))
plt.imshow(gray, cmap='Greys_r')
plt.axis('off')
plt.show()

4. 对图像进行放缩

from scipy import misc
lena_new_sz = misc.imresize(lena, 0.5)  # 第二个参数如果是整数,则为百分比,如果是tuple,则为输出图像的尺寸
plt.imshow(lena_new_sz)
plt.axis('off')
plt.show()

5. 保存图像

5.1 保存 matplotlib 画出的图像

该方法适用于保存任何 matplotlib 画出的图像,相当于一个 screencapture。

plt.imshow(lena_new_sz)
plt.axis('off')
plt.savefig('lena_new_sz.png')
5.2 将 array 保存为图像
from scipy import misc
misc.imsave('lena_new_sz.png', lena_new_sz)
5.3 直接保存 array

读取之后还是可以按照前面显示数组的方法对图像进行显示,这种方法完全不会对图像质量造成损失。

np.save('lena_new_sz', lena_new_sz)  # 会在保存的名字后面自动加上.npy
img = np.load('lena_new_sz.npy')  # 读取前面保存的数组

二、PIL

1. 显示图片

from PIL import Image
im = Image.open('lena.png')
im.show()

2. 将 PIL Image 图片转换为 numpy 数组

im_array = np.array(im)
# 也可以用 np.asarray(im) 区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝

3. 保存 PIL 图片

直接调用 Image 类的 save 方法:

from PIL import Image
I = Image.open('lena.png')
I.save('new_lena.png')

4. 将 numpy 数组转换为 PIL 图片

这里采用 matplotlib.image 读入图片数组,注意这里读入的数组是 float32 型的,范围是 0-1,而 PIL.Image 数据是 uint8 型的,范围是 0-255,所以要进行转换:

import matplotlib.image as mpimg
from PIL import Image
lena = mpimg.imread('lena.png')  # 这里读入的数据是 float32 型的,范围是0-1
im = Image.fromarray(np.uint8(lena * 255))
im.show()

5. RGB 转换为灰度图

from PIL import Image
I = Image.open('lena.png')
I.show()
L = I.convert('L')
L.show()

python matlab画灰度图统计图?

个人意见,一个图里面,一个横坐标你是想怎样对应多个纵坐标值喃,你还需要一个标准在图里表示某列里某个像素值的发布情况,就有3个变量,xyz轴3D图应该更清晰,或者每列里面的每个像素值在xy轴里有一个区间,类似表格,该区间的颜色表示发布多少情况。

Python热力图绘制方法—新手教程

Python热力图绘制方法

热力图的使用场景有:

  1. 描述数据在空间的密集程度,常见有城市热力图,区域热力图
  2. 描述多个变量之间相关性高低程度

Step 1 准备数据集,读取excel列表内容,usecols = index,这里是表里的第一列不读取。

index = range(1, 11)
dataset = np.array(pd.read_csv(r'C:\Users\Administrator\Desktop\heatmap.csv', usecols=index))

Step 2 读取excel行索引转成列表,作为热力图的y轴标签

a = (pd.read_csv(r'C:\Users\Administrator\Desktop\heatmap.csv', usecols=[0]))
y_label = list(a.stack())

Step 3 读取excel列索引转成列表,作为热力图的x轴标签

b = (pd.read_csv(r'C:\Users\Administrator\Desktop\heatmap.csv'))
column_index = (b.columns.tolist())
x_label = column_index[1:]

Step 4 开始绘制热力图

plt.figure(figsize=(14, 8))  # 定义输出图像大小,annot参数决定是否在热力图上显示数值,Vmax,Vmin表示最大最小值,cmap表示颜色
sns.heatmap(dataset, fmt='.0f', annot=True, vmin=0, vmax=max_number, cmap='Reds', yticklabels=y_label,
            xticklabels=x_label)
# 绘制标签
plt.xlabel('This is x label', labelpad=15)
plt.ylabel('This is y label', labelpad=20)
plt.show()

怎么用python进行简单的图像处理

所谓简单的图像处理,就是对像素数据进行点处理。 下面是具体步骤。

读取图片:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
img = cv2.imread("C:/Users/Administrator/Desktop/ball.png")
cv2.imshow("a", img)
cv2.waitKey(0)
cv2.imshow("a", img)

打开一个图片窗口。 Python读取图片,实际上是读取了离散的图片数据:

print(img)

运行,就会给出图片数据。 显示反色图片,只要进行简单的计算:

255 - img

这是 2*img 的效果。 分离通道,图片的第一个通道是:

img[:, :, 0]

成图是灰度图。 第二个通道的灰度图:

img[:, :, 1]

第三个通道的灰度图:

img[:, :, 2]