matplotlib: छवि पर आयत कैसे बनाएं


139

इस तरह एक छवि पर एक आयत कैसे आकर्षित करें: यहाँ छवि विवरण दर्ज करें

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)

मुझे नहीं पता कि कैसे आगे बढ़ना है।

जवाबों:


251

आप Rectanglematplotlib Axes में एक पैच जोड़ सकते हैं ।

उदाहरण के लिए ( यहाँ ट्यूटोरियल से छवि का उपयोग करके ):

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झंडाRectangle
इवान तालालाव

7
यह अजीब है। दस्तावेज़ के लिए patches.Rectangleकहता है कि पहले दो नंबर हैं The bottom and left rectangle coordinates। मैं यहां देखता हूं कि पहले दो नंबर, (50,100), आयत के शीर्ष और बाएं समन्वय के अनुरूप हैं। मैं उलझन में हूं।
मोनिका हेडनक

1
नहीं, आयत सही जगह पर है। यह डेटा निर्देशांक में है। आप इसे बदल सकते हैं यदि आप इसे कुल्हाड़ियों के निर्देशांक में चाहते हैं
tmdavison

20

आपको पैच का उपयोग करने की आवश्यकता है।

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

मुझे यह पसंद आया कि आपने एक आकृति ऑब्जेक्ट के भीतर अक्षों को कैसे समझाया: कुल्हाड़ियों ने साजिश रची, आंकड़ा उच्च-स्तरीय इंटरफ़ेस सामान करता है
एलेक्स

19

सबप्लॉट्स की कोई आवश्यकता नहीं है, और पाइलोट पीआईएल छवियों को प्रदर्शित कर सकते हैं, इसलिए इसे और सरल बनाया जा सकता है:

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)

या, लघु संस्करण:

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

मेरी समझ से matplotlib एक प्लॉटिंग लाइब्रेरी है।

आप छवि डेटा (जैसे एक छवि पर एक आयत बनाएं) बदलना चाहते हैं, तो आप इस्तेमाल कर सकते हैं जनहित याचिका के ImageDraw , OpenCV , या ऐसा ही कुछ।

यहाँ एक आयत बनाने के लिए PIL का ImageDraw तरीका है

यहाँ आयत बनाने के लिए OpenCV की विधियों में से एक है

आपका प्रश्न माटप्लोटलिब के बारे में पूछा गया था, लेकिन शायद एक छवि पर एक आयत बनाने के बारे में पूछा जाना चाहिए।

यहां एक और प्रश्न है जो मुझे लगता है कि आप क्या जानना चाहते हैं, इसका पता लगाएं : एक आयत और उसमें एक पाठ पीआईएल का उपयोग करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.