سؤال

حصلت على هذا السؤال من أستاذ، فيزيائي.

أنا مبتدئ في برمجة بايثون.أنا لست متخصصًا في الكمبيوتر، أنا فيزيائي.كنت أحاول كتابة كود بلغة بايثون لبحثي الخاص والذي يتضمن القليل من معالجة الصور.

كل ما علي فعله هو عرض صورة ثم تحديد المنطقة محل الاهتمام باستخدام الماوس ثم قص المنطقة المحددة أخيرًا.يمكنني القيام بذلك في Matlab باستخدام وظيفة ginput().

حاولت استخدام PIL.ولكنني وجدت أنه بعد أن أصدر الأمر Image.show()، يتم عرض الصورة ولكن بعد ذلك يتوقف البرنامج هناك إلا إذا خرجت من نافذة الصورة.هل هناك أي طريقة لتنفيذ ما كنت أخطط له.هل أحتاج إلى تنزيل أي وحدة أخرى؟يرجى تقديم النصيحة.

هل كانت مفيدة؟

المحلول

وبينما أنا أتفق مع ديفيد التي ربما يجب عليك فقط استخدام GIMP أو بعض الدول الأخرى برنامج معالجة الصور، وهنا هو السيناريو (كما نزعتها إلى أن يكون ممارسة للقارئ) باستخدام <لأ href = "HTTP: // شبكة الاتصالات العالمية .pygame.org / "يختلط =" noreferrer "> pygame أن يفعل ما تريد. سوف تحتاج إلى تثبيت pygame فضلا عن PIL، فإن الاستخدام على النحو التالي:

scriptname.py <input_path> <output_path>

والسيناريو الفعلي:

import pygame, sys
from PIL import Image
pygame.init()

def displayImage( screen, px, topleft):
    screen.blit(px, px.get_rect())
    if topleft:
        pygame.draw.rect( screen, (128,128,128), pygame.Rect(topleft[0], topleft[1], pygame.mouse.get_pos()[0] - topleft[0], pygame.mouse.get_pos()[1] - topleft[1]))
    pygame.display.flip()

def setup(path):
    px = pygame.image.load(path)
    screen = pygame.display.set_mode( px.get_rect()[2:] )
    screen.blit(px, px.get_rect())
    pygame.display.flip()
    return screen, px

def mainLoop(screen, px):
    topleft = None
    bottomright = None
    runProgram = True
    while runProgram:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                runProgram = False
            elif event.type == pygame.MOUSEBUTTONUP:
                if not topleft:
                    topleft = event.pos
                else:
                    bottomright = event.pos
                    runProgram = False
        displayImage(screen, px, topleft)
    return ( topleft + bottomright )


if __name__ == "__main__":
    screen, px = setup(sys.argv[1])
    left, upper, right, lower = mainLoop(screen, px)
    im = Image.open(sys.argv[1])
    im = im.crop(( left, upper, right, lower))
    im.save(sys.argv[2])

ويساعد هذا الأمل:)

نصائح أخرى

لما يستحق الأمر (من عالم فيزياء آخر)، أود أن أفعل ذلك في برنامج معالجة الصور مثل لأعرج.الفائدة الرئيسية من القيام بهذه المهمة في بايثون (أو أي لغة أخرى) هي توفير الوقت عن طريق أتمتة العملية، ولكن ما لم تتمكن - حسنًا، الأستاذ - من تطوير خوارزمية بطريقة أو بأخرى لمعرفة أي جزء من الصورة سيتم اقتصاصه تلقائيًا، لا يبدو أن هناك الكثير من الوقت الذي يمكن توفيره عن طريق الأتمتة.

إذا كنت أتذكر بشكل صحيح، فإن GIMP هو في الواقع قابل للبرمجة، ربما باستخدام Python، لذلك قد يكون من الممكن كتابة برنامج GIMP لتوفير الوقت للقيام بما يريده صديقك الأستاذ.

وImage.show () يدعو فقط مهما كانت بسيطة صورة المشاهد يمكن العثور على منصة الحالية، واحدة قد تكون أو لا يملك المحاصيل وحفظ المرفق.

إذا كنت على مربع ويندوز وتحتاج فقط لجعله يعمل على الجهاز الخاص بك، قم بتعيين جمعية 'فتح مع ... "لتجعل من ذلك تشغيل الأحمال صورة هو داخل محرر من اختيارك. على OS X و * لا شىء كنت تريد أن الإختراق طريقة _showxv () في الجزء السفلي من Image.py لتغيير الأمر المستخدم لفتح الصورة.

إذا كنت بحاجة فعلا لتوفير حل المحمولة، سوف تحتاج إلى استخدام إطار UI لتشغيل التطبيق زراعة المحاصيل الخاصة بك. الخيارات تختزل إلى Tkinter (وImageTk.py يمنحك مجمع لعرض صور PIL في تاكا)، PyQT4 (وImageQt في PIL 1.1.6 يمنحك مجمع لعرض الصور في QT4) أو كسبيثون (ومجموعة أدوات رفيعة المستوى تطبيق التأليف باستخدام كويدغيتس). أنه سوف يكون قدرا كبيرا من العمل للحصول على تعليق من مجموعة UI كاملة، ولكن عليك أن تكون قادرا على تخصيص تماما كيف واجهة التطبيق الخاص بك سوف تعمل.

هل هناك برنامج نصي في الثعبان مثل مكتبة لصور السيارات المحاصيل: href="http://codeunivers.com/source-codes/python/automatically_crop_image" تلقائيا صورة المحاصيل

ما كنت تبحث عن وحدة: matplotlib، فإنه يحاكي ماتلاب. اطلع على وظيفة ginput (). التي تسمح لك العثور على المربع المحيط، ثم يمكنك استخدام المحاصيل من PIL.

http://matplotlib.sourceforge.net/api/figure_api.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top