问题描述:
ValueError: Number of columns must be a positive integer, not <matplotlib.image.AxesImage object at 0x000001B1BB6ED5E0>
C:\Users\aoqia\anaconda3\envs\yolov5\python.exe C:/Users/aoqia/PycharmProjects/pythonProject/main.py
Traceback (most recent call last):
File "C:/Users/aoqia/PycharmProjects/pythonProject/main.py", line 11, in <module>
plt.subplot(121, plt.imshow(img), plt.title('Input'))
File "C:\Users\aoqia\anaconda3\envs\yolov5\lib\site-packages\matplotlib\pyplot.py", line 1323, in subplot
key = SubplotSpec._from_subplot_args(fig, args)
File "C:\Users\aoqia\anaconda3\envs\yolov5\lib\site-packages\matplotlib\gridspec.py", line 587, in _from_subplot_args
gs = GridSpec._check_gridspec_exists(figure, rows, cols)
File "C:\Users\aoqia\anaconda3\envs\yolov5\lib\site-packages\matplotlib\gridspec.py", line 226, in _check_gridspec_exists
return GridSpec(nrows, ncols, figure=figure)
File "C:\Users\aoqia\anaconda3\envs\yolov5\lib\site-packages\matplotlib\gridspec.py", line 379, in __init__
super().__init__(nrows, ncols,
File "C:\Users\aoqia\anaconda3\envs\yolov5\lib\site-packages\matplotlib\gridspec.py", line 52, in __init__
raise ValueError(
ValueError: Number of columns must be a positive integer, not <matplotlib.image.AxesImage object at 0x00000201C3ACD5E0>
Process finished with exit code 1
源代码如下:
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('logo4.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(img), plt.title('Output'))
plt.show()
问题解答:
这个错误是因为在调用 plt.subplot
时,参数的传递方式不正确。plt.subplot
的正确用法是传递网格的行数、列数和当前子图的索引,而不是直接在 subplot
内部调用 imshow
和 title
。你可以按如下方式修改代码:
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('logo4.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.imshow 之前先创建子图
plt.subplot(121)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Input')
plt.subplot(122)
plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.title('Output')
plt.show()
这样就能正确显示原图和变换后的图像。