Câu trả lời:
Bạn có thể thêm một Rectangle
bản vá vào các trục matplotlib.
Ví dụ: (sử dụng hình ảnh từ hướng dẫn ở đây ):
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from PIL import Image
import numpy as np
im = np.array(Image.open('stinkbug.png'), dtype=np.uint8)
# Create figure and axes
fig,ax = plt.subplots(1)
# Display the image
ax.imshow(im)
# Create a Rectangle patch
rect = patches.Rectangle((50,100),40,30,linewidth=1,edgecolor='r',facecolor='none')
# Add the patch to the Axes
ax.add_patch(rect)
plt.show()
fill=False
cờ đếnRectangle
patches.Rectangle
biết rằng hai số đầu tiên là The bottom and left rectangle coordinates
. Tôi thấy ở đây hai số đầu tiên, (50.100), tương ứng với tọa độ TOP và trái của hình chữ nhật. Tôi bối rối.
Bạn cần sử dụng các bản vá.
import matplotlib.pyplot as plt
import matplotlib.patches as patches
fig2 = plt.figure()
ax2 = fig2.add_subplot(111, aspect='equal')
ax2.add_patch(
patches.Rectangle(
(0.1, 0.1),
0.5,
0.5,
fill=False # remove background
) )
fig2.savefig('rect2.png', dpi=90, bbox_inches='tight')
Không cần subplots và pyplot có thể hiển thị hình ảnh PIL, vì vậy điều này có thể được đơn giản hóa hơn nữa:
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from PIL import Image
im = Image.open('stinkbug.png')
# Display the image
plt.imshow(im)
# Get the current reference
ax = plt.gca()
# Create a Rectangle patch
rect = Rectangle((50,100),40,30,linewidth=1,edgecolor='r',facecolor='none')
# Add the patch to the Axes
ax.add_patch(rect)
Hoặc, phiên bản ngắn:
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from PIL import Image
# Display the image
plt.imshow(Image.open('stinkbug.png'))
# Add the patch to the Axes
plt.gca().add_patch(Rectangle((50,100),40,30,linewidth=1,edgecolor='r',facecolor='none'))
Từ sự hiểu biết của tôi matplotlib là một thư viện âm mưu.
Nếu bạn muốn thay đổi dữ liệu hình ảnh (ví dụ: vẽ hình chữ nhật trên hình ảnh), bạn có thể sử dụng ImageDraw , OpenCV của PIL hoặc một cái gì đó tương tự.
Dưới đây là phương pháp ImageDraw của PIL để vẽ hình chữ nhật .
Đây là một trong những phương pháp của OpenCV để vẽ hình chữ nhật .
Câu hỏi của bạn hỏi về Matplotlib, nhưng có lẽ nên hỏi về việc vẽ một hình chữ nhật trên một hình ảnh.
Đây là một câu hỏi khác giải quyết những gì tôi nghĩ bạn muốn biết: Vẽ một hình chữ nhật và một văn bản trong đó bằng PIL