欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 图像可视化

图像可视化

2025/4/30 17:40:49 来源:https://blog.csdn.net/weixin_65350212/article/details/147478106  浏览:    关键词:图像可视化

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()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词