当前位置: 首页 > news >正文

图像可视化

matplotlib

官网地址 :点击跳转

1、折线图

import numpy as np
import matplotlib.pyplot as pltx = np.arange(-10, 10, 0.5)
y1 = np.sin(x)
y2 = np.cos(x)plt.plot(x, y1, label='y1', color='r', marker='*', linestyle='-')
plt.plot(x, y2, label='y2', color='b', marker='o', linestyle='--')
plt.legend(loc='upper left')  # 添加图例,放在左上角位置
plt.show()

color、marker、linestyle、legend 可选值 见本文最后 附


2、散点图

import matplotlib.pyplot as plt# 数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]# 绘制散点图
plt.scatter(x, y)# 添加标题和坐标轴标签
plt.title('Scatter Plot Example')
plt.xlabel('X')
plt.ylabel('Y')# 显示网格线
plt.grid(True)# 显示图像
plt.show()

 


3、绘制矩形框

matplotlib.patches.Rectangle 是 Matplotlib 提供的一个用于绘制矩形的类,它可以在图表中绘制一个矩形形状的对象。 

matplotlib.patches.Rectangle(xy, width, height, angle=0.0, **kwargs)

参数:

  • (x, y): 矩形的左下角的坐标。这个坐标表示矩形左下角的位置。

  • width: 矩形的宽度。

  • height: 矩形的高度。

  • angle: 矩形的旋转角度。默认值为0,表示矩形不旋转。

  • linewidth: 矩形边框线的宽度。

  • edgecolor: 矩形边框线的颜色。

  • facecolor: 矩形填充的颜色。如果设置为 'none'None,则表示矩形不填充。

  • alpha: 矩形的透明度,取值范围为 0 到 1。

  • linestyle: 矩形边框线的样式。默认值为 'solid'

import matplotlib.pyplot as plt
import matplotlib.patches as patches# 创建一个矩形对象
rectangle = patches.Rectangle((0.2, 0.3), 0.5, 0.4, linewidth=2, edgecolor='r', facecolor='none')# 显示图形
fig, ax = plt.subplots()
ax.add_patch(rectangle)
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.show()

 


3、图像读取与可视化

  • matplotlib 使用 plt.imshow(image) 进行可视化时,image 的格式需为 [H、W、C]

  • 三通道的顺序需为 :RGB

1)使用 matplotlib 读取图像,并使用 matplotlib 可视化图像

import matplotlib.image as mpimg
import matplotlib.pyplot as plt# 读取图像
image = mpimg.imread("example_image.jpg")# 获取图像尺寸
height, width, channels = image.shape
print(width, height, channels)  # 640 426 3# 可视化图像
plt.imshow(image)
plt.axis('off')  # 关闭坐标轴
plt.show()

 

2)或者,我们一般也使用 PIL 读取图像,并使用 matplotlib 可视化图像

from PIL import Image
import matplotlib.pyplot as pltimage = Image.open("example_image.jpg")print(image.width, image.height)  # 640 426plt.axis('off')
plt.imshow(image)
plt.show()

4、可视化多张图像 

  • plt.subplot(223) :参数中的 223 分别表示,图像展示格局为 2行 2列,当这个图像放在第3个位置(即第2行第1列的位置)

import PIL.Image as Image
import matplotlib.pyplot as pltimg1 = Image.open('./COCO2017/train2017/000000000025.jpg')
img2 = Image.open('./COCO2017/train2017/000000000030.jpg')
img3 = Image.open('./COCO2017/train2017/000000000034.jpg')plt.subplot(221)
plt.axis('off')
plt.imshow(img1)plt.subplot(222)
plt.axis('off')
plt.imshow(img2)plt.subplot(223)
plt.axis('off')
plt.imshow(img3)plt.show()

 


5、在图像上绘制散点 

import matplotlib.pyplot as plt
import PIL.Image as Image
import numpy as np# 读取图像
image = Image.open('example_image')
width, height = image.size[:2]
# 绘制图像
plt.imshow(image)# 生成一些随机的散点数据
num_points = 50
x = np.random.randint(0, width, 20)
y = np.random.randint(0, height, 20)# 绘制散点
plt.scatter(x, y, color='red', marker='o')# 显示图像
plt.axis('off')
plt.show()


6、在图像上绘制矩形 并标注文字

需要注意的是,对于图像来说,图像左上角点是原点,这时 patches.Rectangle 参数指定的是 矩形左上角点的坐标,和 图像的宽、高 

from PIL import Image
import requests
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np# 读取一张图像
url = 'https://farm4.staticflickr.com/3120/2862048068_0cf5eed770_z.jpg'
image = Image.open(requests.get(url, stream=True).raw)# 绘制图像
plt.axis('off')
plt.imshow(image)# 创建一个矩形对象并添加到图像中,(66, 110) 是左上角点的 x 和 y
rectangle = patches.Rectangle((66, 110), 85, 133, linewidth=2, edgecolor='r', facecolor='none')
plt.gca().add_patch(rectangle)# 标注文字
plt.text(66, 110, 'cow: 86%', color='r', fontsize=9, verticalalignment='bottom',bbox=dict(facecolor='yellow', edgecolor='r'))# 显示图像
plt.show()


1)color 的可选值 

查看官网

2)marker 可选值

查看官网

 

 

3)inestyle 可选值

查看官网

 

4)Legend 参数 loc 位置可选值

  查看官网


Python关于%matplotlib inline 标红底报错 

import numpy
import matplotlib.pyplot as plt
%matplotlib inline

当你copy 别人的代码的时候,其中最后一句 %matplotlib inline 总是红底下划线,显示是 invalid syntax(无效语法)。为啥别人用就行,你用就不行呢?

原因是:在使用 jupyter notebook 或者 jupyter qtconsole的时候,才会经常用到 %matplotlib,也就是说,那一份代码可能就是别人使用 jupyter notebook 或者 jupyter qtconsole 进行编辑的。 而你如果使用的是 spyder 或者pycharm,你就用不着那句代码

当我们在spyder或者pycharm实际运行代码的时候,可以直接注释掉这一句,也是可以运行成功的。


cv2

1、图片读取 cv2.imread()

img = cv2.imread(filename, flags)
  • filename:指定图像的路径

  • flags:用来控制读取文件的类型,flages的参数值如下表。表中第一列参数与第三列是等价的,在设置参数时,既可以使用第一列的参数值,也可以使用第三列的参数值。即 img = cv2.imread('image.bmp', cv2.IMREAD_UNCHANGED) img = cv2.imread('image.bmp', -1) 效果是一样的


2、图片展示

1)cv2. imshow()

cv2.imshow() 用于创建一个指定名称的窗口,并在窗口中展示图像

cv2.imshow(winname, mat)
  • winname: 窗口的名称

  • mat:要显示的图像

举例

import cv2img = cv2.imread('./lena.png', -1)
cv2.imshow('lena', img)
cv2.waitKey()
cv2.destroyWindow('lena')

说明

  • 函数 cv2.imshow() 之后要用 cv2.waitKey() 函数设定图像窗口的显示时长,否则不会显示图像窗口。

  • 图像窗口将在 waitKey() 函数所设定的时长(毫秒)后自动关闭,waitKey(0) 表示窗口显示时长为无限,不填写的话参数值默认为0。

  • 显示图片时,可以创建多个不同的显示窗口,每个窗口必须有不同的名称。


2、cv2.waitKey()

cv2.waitKey(delay)
  • delay 表示等待键盘触发的时间,单位为ms;该值默认为0

    • 当该值是负数或0时,表示无限等待,直到用户在键盘上点击任意一个键后,图片消失;

    • 如果设置改值为1000,则1000ms后,图片自动消失


3、cv2. destroyWindow()

  • 函数 cv2.destroyWindow() 用来释放(销毁)指定窗口

import cv2 img = cv2.imread('./lena.png', cv2.IMREAD_UNCHANGED)
cv2.imshow('lena', img)
cv2.waitKey()
cv2.destroyWindow('lena')

运行如上程序,首先会在一个名为 'lena' 的窗口内显示 lena.png 图像。当按下键盘上的任意一个按键后,名称为 'lena' 的窗口会被释放。


4、cv2. destroyAllWindows()

  • 函数 cv2.destroyAllWindows() 用来释放(销毁)所有窗口

import cv2 img = cv2.imread('./lena.png', cv2.IMREAD_UNCHANGED)
cv2.imshow('lena1', img)
cv2.imshow('lena2', img)
cv2.waitKey()
cv2.destroyAllWindows()

运行如上程序,会分别出现名称为 'lena1' 和 'lena2' 的窗口,在两个窗口中显示的都是 lena.png 图像。当按下键盘上的任意一个按键后,两个窗口都会被释放。


3、常见错误

1)常见错误一:图片路径错误

若错误提示为 :

`error: (-215:Assertion failed)size.width>0&& size.height>0 in function 'cv::imshow'`

这通常是由于在读取文件时没有找到图像文件造成的。

2)常见错误二:点击任意键,图像没有消失

用 jupyter 运行的时候,可能会出现一个情况就是: 图片展示出来了,但是点击任意键,图像不会消失,而是光标在转圈。

解决方案是,在destroyAllWindows 之后,再加一个 cv2.waitKey(1)

import cv2img = cv2.imread('./images/LenaRGB.bmp', -1)
cv2.imshow('lena', img)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.waitKey(1)

PIL

1、读取本地图片

  PIL.Image.open 读取进来的图像,没有shape属性(有 size属性),可以通过 size 查看图像尺寸

  通过size获取到的尺寸,没有channel信息,只有 width 和 height (注意 width 和 height 的顺序)

from PIL import Image# 打开图像文件
image = Image.open("example_image.jpg")# 获取图像尺寸
width, height = image.size
print(width, height)  # 640 426

2、读取网络图片

from PIL import Image
import requests
import matplotlib.pyplot as plturl = 'https://farm4.staticflickr.com/3120/2862048068_0cf5eed770_z.jpg'
image = Image.open(requests.get(url, stream=True).raw)print(image.width, image.height)  # 640 426plt.axis('off')
plt.imshow(image)
plt.show()

注意:

  • cv2 可视化图像,要求图像格式为 :BGR

  • matplotlib 可视化图像,要求图像格式为 :RGB

使用 cv2 读取图像,使用 matplotlib 可视化图像,需要将图像从 BGR 格式转换为 RGB 格式

import cv2
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread("example_image.jpg")# 将 BGR 格式转换为 RGB 格式
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 可视化图像
plt.imshow(image_rgb)
plt.axis('off')  # 关闭坐标轴
plt.show()

相关文章:

  • PCB常见封装类型
  • RSUniVLM论文精读
  • 【深度】如何通过MCP实现多智能体之间的协同
  • IDEA导入并启动若依项目步骤(SpringBoot+Vue3)
  • 【华为HCIP | 华为数通工程师】821—多选解析—第十五页
  • m365是什么,和o365的区别
  • 自动化标注软件解析
  • 多回路电表如何革新电力监控?安科瑞技术深度解析
  • linux:启动后,ubuntu屏幕变成红色了
  • 从平台工程视角出发,重塑云原生后端的工程体系
  • 电商热点数据哈希槽分片案例:双11秒杀场景设计
  • 陪诊陪检系统源码,陪诊小程序,陪诊APP,陪诊服务,家政上门系统,居家护理陪护源码,医护小程序
  • 学员答题pk知识竞赛小程序怎么做
  • WPS右键菜单中“上传到云文档”消失,使用命令行注册解决
  • Spring Boot 配置处理器深度解析:元数据驱动的工程实践
  • “解惑指南之书”:用技术为生活难题解锁新视角
  • 图论---Prim堆优化(稀疏图)
  • Selenium 怎么加入代理IP,以及怎么检测爬虫运行的时候,是否用了代理IP?
  • 报错_NoSuchMethodException: cn.mvc.entity.User.<init>()
  • 多线程中的ABA问题详解
  • 上海银行一季度净赚逾62亿增2.3%,不良贷款率与上年末持平
  • 王宝强谈《棋士》:饰演这个灰度人物有一种被割裂的痛苦
  • 正荣地产旗下“H20正荣2”债未能于宽限期内支付分期偿付款,尚未就新兑付方案达成一致
  • 世界最大全电驱可拆装环保绞吸船投入官厅水库清淤试点工程
  • 瑞穗银行(中国)有限公司行长:重庆赛力斯超级工厂的智能化程度令人震惊
  • 工人日报评一些旅行社不收记者律师:“拒客黑名单”暴露心虚病