plt.imread读取图片如何resize
时间: 2023-09-07 14:13:11 浏览: 110
可以使用Python的Pillow库对图片进行resize,然后再使用plt.imshow显示图片。以下是一个简单的示例代码:
```python
import matplotlib.pyplot as plt
from PIL import Image
# 读取图片
img = plt.imread('example.jpg')
# 使用Pillow库对图片进行resize
img = Image.fromarray(img)
img_resized = img.resize((new_width, new_height))
# 显示resize后的图片
plt.imshow(img_resized)
plt.show()
```
其中,`new_width`和`new_height`分别是调整后的图片宽度和高度。需要注意的是,在使用Pillow库对图片进行resize时,需要将numpy数组转换为Pillow的Image对象,然后再进行操作。
相关问题
# 透视变换复习 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('sudoku.jpg') rows,cols,ch = img.shape pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]]) pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]]) M = cv2.getPerspectiveTransform(pts1,pts2) dst = cv2.warpPerspective(img,M,(300,300)) plt.subplot(121),plt.imshow(img),plt.title('Input') plt.subplot(122),plt.imshow(dst),plt.title('Output') plt.show() img = cv2.imread('road.png') cv2.circle(img, (270,160),2, (0,0,255),2) cv2.circle(img, (330,160),2, (0,0,255),2) cv2.circle(img, (32,260),2, (0,0,255),2) cv2.circle(img, (555,260),2, (0,0,255),2) cv2.imshow('draw', img) cv2.waitKey(0) import matplotlib.pyplot as plt rows,cols,ch = img.shape pts1 = np.float32([[270,160],[328,160],[32,260],[575,260]]) pts2 = np.float32([[20,0],[510,0],[20,103],[510,103]]) M = cv2.getPerspectiveTransform(pts1,pts2) dst = cv2.warpPerspective(img,M,(523,100)) dst = cv2.resize(dst, None, fx=0.5,fy=4.0) plt.subplot(121),plt.imshow(img),plt.title('Input') plt.subplot(122),plt.imshow(dst),plt.title('Output') plt.show() 在每句代码后详细解释注释这段代码
```
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取一张图片
img = cv2.imread('sudoku.jpg')
# 获取图片的行、列、通道数
rows,cols,ch = img.shape
# 定义变换前后四个点的坐标
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
# 计算透视变换矩阵M
M = cv2.getPerspectiveTransform(pts1,pts2)
# 进行透视变换
dst = cv2.warpPerspective(img,M,(300,300))
# 显示原始图片和透视变换后的图片
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
# 读取另一张图片
img = cv2.imread('road.png')
# 在图片上标记四个点
cv2.circle(img, (270,160),2, (0,0,255),2)
cv2.circle(img, (330,160),2, (0,0,255),2)
cv2.circle(img, (32,260),2, (0,0,255),2)
cv2.circle(img, (555,260),2, (0,0,255),2)
# 显示标记后的图片
cv2.imshow('draw', img)
cv2.waitKey(0)
# 获取图片的行、列、通道数
rows,cols,ch = img.shape
# 定义变换前后四个点的坐标
pts1 = np.float32([[270,160],[328,160],[32,260],[575,260]])
pts2 = np.float32([[20,0],[510,0],[20,103],[510,103]])
# 计算透视变换矩阵M
M = cv2.getPerspectiveTransform(pts1,pts2)
# 进行透视变换
dst = cv2.warpPerspective(img,M,(523,100))
# 缩放变换后的图片
dst = cv2.resize(dst, None, fx=0.5,fy=4.0)
# 显示原始图片和透视变换后的图片
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
```
代码的详细解释如下:
1. 导入需要的库cv2、numpy和matplotlib.pyplot。
2. 读取一张图片(这里是sudoku.jpg)。
3. 获取图片的行、列、通道数。
4. 定义变换前后四个点的坐标(pts1和pts2),这些点用于计算透视变换矩阵M。在这个例子中,我们想要将数独图片的四个角变换为一个矩形,以便进行后续处理。
5. 使用cv2.getPerspectiveTransform()函数来计算透视变换矩阵M。
6. 使用cv2.warpPerspective()函数将原始图像img进行透视变换,并将变换后的图像保存为dst。
7. 使用plt.subplot()和plt.imshow()函数将原始图像和透视变换后的图像显示出来,以供观察和比较。
8. 读取另一张图片(这里是road.png)。
9. 在图片上标记四个点,以便后续计算透视变换矩阵。
10. 显示标记后的图片。
11. 再次获取图片的行、列、通道数。
12. 重新定义变换前后四个点的坐标,这些点用于计算透视变换矩阵M。在这个例子中,我们想要将道路的四个角变换为一个矩形,以便进行后续处理。
13. 使用cv2.getPerspectiveTransform()函数来计算透视变换矩阵M。
14. 使用cv2.warpPerspective()函数将原始图像img进行透视变换,并将变换后的图像保存为dst。
15. 使用cv2.resize()函数对变换后的图像进行缩放,以便更好地观察。
16. 使用plt.subplot()和plt.imshow()函数将原始图像和透视变换后的图像显示出来,以供观察和比较。
def image_hist2d(image_path: str): # 二维直方图 img = cv.imread(image_path, cv.IMREAD_COLOR) cv.imshow('img', img) # 图像转HSV颜色空间 hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) hist = cv.calcHist([hsv], [0, 1], None, [48, 48], [0, 180, 0, 256]) dst = cv.resize(hist, (400, 400)) # 像素归一化 cv.normalize(dst, dst, 0, 255, cv.NORM_MINMAX) # 色彩填充 dst = cv.applyColorMap(np.uint8(dst), cv.COLORMAP_JET) cv.imshow('hist', dst) plt.imshow(hist, interpolation='nearest') plt.title('2D Histogram') plt.show() cv.waitKey(0) cv.destroyAllWindows()
这段代码实现了计算并绘制图像的二维直方图。具体步骤如下:
1. 读取图像:使用`cv.imread(image_path, cv.IMREAD_COLOR)`函数读取指定路径的图像,并将其存储在变量`img`中。
2. 显示图像:使用`cv.imshow('img', img)`函数显示原始图像。
3. 转换颜色空间:使用`cv.cvtColor(img, cv.COLOR_BGR2HSV)`函数将图像从BGR颜色空间转换为HSV颜色空间,并将转换后的图像存储在变量`hsv`中。
4. 计算二维直方图:使用`cv.calcHist([hsv], [0, 1], None, [48, 48], [0, 180, 0, 256])`函数计算二维直方图。其中,`[hsv]`表示输入图像,`[0, 1]`表示通道索引,表示计算第0和第1个通道的直方图,`[48, 48]`表示直方图的大小为48x48,`[0, 180, 0, 256]`表示两个通道的范围分别是H通道(色调)的范围为0到180,S通道(饱和度)的范围为0到256。
5. 调整直方图尺寸:使用`cv.resize(hist, (400, 400))`函数将直方图调整为400x400的大小,并将调整后的直方图存储在变量`dst`中。
6. 像素归一化:使用`cv.normalize(dst, dst, 0, 255, cv.NORM_MINMAX)`函数将直方图像素值归一化到0到255的范围。
7. 色彩填充:使用`cv.applyColorMap(np.uint8(dst), cv.COLORMAP_JET)`函数将归一化后的直方图应用颜色映射,使其具有色彩填充效果,并将填充后的图像存储在变量`dst`中。
8. 显示直方图:使用`cv.imshow('hist', dst)`函数显示填充后的直方图。
9. 绘制直方图:使用`plt.imshow(hist, interpolation='nearest')`函数绘制二维直方图,`interpolation='nearest'`参数指定使用最近邻插值方法绘制图像。
10. 设置图像标题:使用`plt.title('2D Histogram')`函数设置图像的标题。
11. 显示绘制结果:使用`plt.show()`函数显示绘制的二维直方图。
12. 等待按键:使用`cv.waitKey(0)`函数等待用户按下任意按键。
13. 关闭窗口:使用`cv.destroyAllWindows()`函数关闭所有打开的窗口。
这段代码可以帮助我们分析图像在HSV颜色空间中的色调和饱和度分布情况,以便进行颜色相关的图像处理或分析。