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

আপনি Rectangleম্যাটপ্ল্লিটিব অক্ষগুলিতে একটি প্যাচ যুক্ত করতে পারেন ।

উদাহরণস্বরূপ (টিউটোরিয়াল থেকে চিত্রটি এখানে ব্যবহার করে ):

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

আমি পছন্দ করেছি আপনি কীভাবে একটি চিত্রের অবজেক্টের মধ্যে অক্ষগুলি আবদ্ধ করেছেন: অক্ষগুলি প্লট করা হয়, চিত্র উচ্চ স্তরের ইন্টারফেস স্টাফ করে
Alex

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

আমার বুদ্ধি থেকে ম্যাটপ্লটলিব একটি চক্রান্ত গ্রন্থাগার।

আপনি ইমেজ তথ্য (যেমন একটি চিত্রে একটি আয়তক্ষেত্র আঁকা) পরিবর্তন করতে চান, আপনি ব্যবহার করতে পারে PIL এর ImageDraw , OpenCV বা অনুরূপ কিছু।

একটি আয়তক্ষেত্র আঁকতে এখানে পিআইএল এর ইমেজড্রো পদ্ধতি রয়েছে

আয়তক্ষেত্র আঁকার জন্য ওপেনসিভি এর একটি পদ্ধতি এখানে রয়েছে ।

আপনার প্রশ্নটি ম্যাটপ্ল্লোব সম্পর্কে জিজ্ঞাসা করেছিল, তবে সম্ভবত কোনও চিত্রের উপর একটি আয়তক্ষেত্র আঁকার বিষয়ে জিজ্ঞাসা করা উচিত ছিল।

এখানে আরও একটি প্রশ্ন রয়েছে যা আমি আপনাকে যা জানাতে চেয়েছিলাম তার ঠিকানা দেয়: পিআইএল ব্যবহার করে একটি আয়তক্ষেত্র এবং একটি পাঠ্য আঁকুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.