مكتبة معالجة الصور Ruby-vips.هل هناك أي أمثلة جيدة للاستخدام؟

StackOverflow https://stackoverflow.com//questions/10709995

  •  13-12-2019
  •  | 
  •  

سؤال

أنا جديد تمامًا في معالجة الصور.لا أعرف شيئًا عن ماهية JPEG داخليًا وكيف يعمل.

أتساءل عما إذا كان بإمكاني العثور على جزء من كود روبي في مكان ما يؤدي العملية البسيطة التالية:

  1. افتح ملف JPEG.
  2. قم بالتكرار عبر كل بكسل واضبط لونه على اللون الأخضر.
  3. كتابة النتيجة إلى ملف آخر.

أنا مهتم بشكل خاص بكيفية تحقيق ذلك باستخدام مكتبة Ruby-vips
https://github.com/ender672/Ruby-vips

هدفي هو معرفة كيفية إجراء عمليات معالجة الصور الأساسية باستخدام Ruby-vips (تصحيح جاما، السطوع، الصبغة، ...)

أي روابط لأمثلة عمل أكثر تعقيدًا من "hello World" - مثل تلك الموجودة على صفحة github الخاصة بـ Ruby-vips ستكون موضع تقدير كبير!

إذا كانت هناك بدائل لـ Ruby-vips، سأكون ممتنًا لها أيضًا.


تحديث

لقد حدث الكثير منذ أن طرحت هذا السؤال:

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

المحلول

تحديث لقد تغيرت Ruby-vips قليلاً منذ كتابة هذه الإجابة.لقد قمت بمراجعته للإصدار الحالي (2018).

أنا أحد المشرفين على libvips، مكتبة معالجة الصور التي يغلفها روبي vips.

لم يتم التطرق إلى مستودع Tim الخاص بـ Ruby-vips منذ فترة.لدي شوكة هنا تعمل مع libvips الحالي:

https://github.com/jcupitt/Ruby-vips

هناك بعض الأمثلة هنا:

https://github.com/jcupitt/ruby-vips/tree/master/example

لتعيين القنوات الحمراء والأزرق على الصفر وترك صورة خضراء قد تتكاثر R و B بواسطة صفر و G بمقدار 1.يستخدم Ruby-vips المصفوفات لتمثيل ثوابت البكسل، لذا يمكنك فقط كتابة:

out = in * [0, 1, 0]

قد يكون المثال الكامل القابل للتشغيل هو:

#!/usr/bin/ruby

require 'vips'

im = Vips::Image.new_from_file '/home/john/pics/theo.jpg'
im *= [0, 1, 0]
im.write_to_file 'x.jpg'

هناك خدعة يمكنك استخدامها new_from_file:إذا كنت تعلم أنك ستقوم فقط بإجراء عمليات بسيطة من أعلى إلى أسفل على الصورة، مثل العمليات الحسابية أو التصفية أو تغيير الحجم، فيمكنك إخبار Ruby-vips أنك تحتاج فقط إلى الوصول المتسلسل إلى وحدات البكسل:

im = Vips::Image.new_from_file '/home/john/pics/theo.jpg', access: :sequential

الآن سوف يقوم Ruby-vips ببث صورتك.سيتم تشغيل التحميل والضرب والحفظ بالتوازي ولن يحتفظ أبدًا بأكثر من عدد قليل من خطوط المسح الضوئي للبكسل في الذاكرة في أي وقت.يمكن أن يوفر هذا تحسنًا رائعًا حقًا في السرعة واستخدام الذاكرة.

لتغيير جاما الصورة، يمكنك تجربة شيء مثل:

im = im ** 0.5 * 255 / 255 ** 0.5

على الرغم من أن ذلك سيكون بطيئًا بعض الشيء (سيتم استدعاء pow() ثلاث مرات لكل بكسل)، إلا أنه سيكون من الأسرع بكثير إنشاء جدول بحث، وتشغيل pow() عليه، ثم تعيين الصورة من خلال الجدول. :

lut = Vips::Image.identity
lut = lut ** 0.5 * 255 /255 ** 0.5
im = im.maplut lut

إذا كانت لديك أي أسئلة، فلا تتردد في فتحها على أداة تعقب مشكلات Rubyvips:

https://github.com/jcupitt/ruby-vips/issues

نصائح أخرى

أنا آسف، لا أعرف روبي VIPS، ولكن imageemagick هو كلاسيكي عندما يتعلق الأمر بمعالجة الصور. هناك ارتباطات روبي في شكل Rmagick ( repo الحالي )، ويمكنك أن تستمد الكثير من الوظائف من مستندات ImageMagick، ولكن هناك أيضا ثلاثة دروس هنا ، وكذلك الكثير من الأمثلة على الويب.

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

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