matplotlib: görüntü üzerine dikdörtgen nasıl çizilir


139

Bir görüntü üzerine şöyle bir dikdörtgen nasıl çizilir: görüntü açıklamasını buraya girin

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
im = np.array(Image.open('dog.png'), dtype=np.uint8)
plt.imshow(im)

Nasıl ilerleyeceğimi bilmiyorum.

Yanıtlar:


251

RectangleMatplotlib Axes'e bir yama ekleyebilirsiniz .

Örneğin (öğreticisindeki görüntü kullanılarak burada ):

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

görüntü açıklamasını buraya girin


Cevabınız için teşekkürler! İşe yarıyor, ancak görünen o ki, dikdörtgenin resmin kendisi değil, eksen üzerinde çizilmiş. Görüntüyü bir dosyaya kaydetmeye çalışırsam dikdörtgen kaydedilmeyecek. Dikdörtgenin görüntüdeki piksel değerlerini değiştirmesinin bir yolu var mı? Tekrar teşekkürler!
Yanfeng Liu

Boşver. Bu bağlantıyı buldum ve çalışıyor gibi görünüyor
:)

Dikdörtgeni hala doldurmaya devam ediyorsanız, fill=Falsebayrağı şu Rectangle
adrese geçirin

7
Bu tuhaf. Belgeleri patches.Rectangle, ilk iki numaranın olduğunu söylüyor The bottom and left rectangle coordinates. Burada ilk iki sayının (50,100) dikdörtgenin ÜST ve sol koordinatına karşılık geldiğini görüyorum. Kafam karıştı.
Monica Heddneck

1
Hayır, dikdörtgen doğru yerde. Veri koordinatlarında. Eksen koordinatlarında isterseniz dönüşümü değiştirebilirsiniz
tmdavison

20

Yamalara ihtiyacınız var.

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

Bir figür nesnesinin içinde eksenleri nasıl kapsüllediğinizi sevdim: eksenler çizim yapar, figür üst düzey arayüz işleri yapar
Alex

19

Alt planlara gerek yoktur ve pyplot PIL görüntülerini görüntüleyebilir, böylece bu daha da basitleştirilebilir:

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)

Veya kısa versiyon:

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

7

Anladığım kadarıyla matplotlib bir komplo kütüphanesi.

Görüntü verilerini değiştirmek istiyorsanız (örneğin, bir görüntü üzerine bir dikdörtgen çizin), PIL'in ImageDraw , OpenCV veya benzeri bir şeyi kullanabilirsiniz.

İşte bir dikdörtgen çizmek için pil takımından ImageDraw yöntemi .

İşte OpenCV'nin dikdörtgen çizme yöntemlerinden biri .

Sorunuz Matplotlib hakkında sordu, ancak muhtemelen bir görüntü üzerine bir dikdörtgen çizmeyi sormalıydı.

İşte bilmek istediğini düşündüğüm şeyi ele alan başka bir soru: PIL kullanarak bir dikdörtgen ve içine bir metin çizin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.