কম্পিউটার

কিভাবে OpenCV Mat অবজেক্টকে JavaFX WritableImage এ রূপান্তর করবেন?


আপনি যদি OpenCV imread() ব্যবহার করে একটি ছবি পড়ার চেষ্টা করেন পদ্ধতি এটি একটি ম্যাট বস্তু প্রদান করে। আপনি যদি একটি JavaFX উইন্ডো ব্যবহার করে ফলাফলের ম্যাট অবজেক্টের বিষয়বস্তু প্রদর্শন করতে চান তাহলে আপনাকে ম্যাট অবজেক্টটিকে javafx.scene.image.WritableImage ক্লাসের একটি অবজেক্টে রূপান্তর করতে হবে। এটি করার জন্য, আপনাকে নীচে দেওয়া পদক্ষেপগুলি অনুসরণ করতে হবে -

  • MatOfByte-এ ম্যাট এনকোড করুন − প্রথমত, আপনাকে ম্যাট্রিক্সকে একটি বাইটের ম্যাট্রিক্সে রূপান্তর করতে হবে। আপনি imencode() পদ্ধতি ব্যবহার করে এটি করতে পারেন ক্লাস Imgcodecs এর।

  • এই পদ্ধতিটি একটি স্ট্রিং প্যারামিটার (ছবির বিন্যাস নির্দিষ্ট করে), একটি ম্যাট অবজেক্ট (ছবির প্রতিনিধিত্ব করে), একটি MatOfByte অবজেক্ট গ্রহণ করে।

  • MatOfByte অবজেক্টকে বাইট অ্যারেতে রূপান্তর করুন − MatOfByte বস্তুটিকে একটি বাইট অ্যারেতে রূপান্তর করুন toArray() পদ্ধতি ব্যবহার করে।

  • ইনস্ট্যান্টিয়েট ByteArrayInputStream − পূর্ববর্তী ধাপে তৈরি করা বাইট অ্যারেটি এর একজন কনস্ট্রাক্টরের কাছে পাস করে ByteArrayInputStream ক্লাসটি চালু করুন৷

  • বাফারড ইমেজ অবজেক্ট তৈরি করা হচ্ছে − পূর্ববর্তী ধাপে তৈরি করা ইনপুট স্ট্রিম অবজেক্টটিকে ImageIO ক্লাসের read() পদ্ধতিতে পাস করুন। এটি একটি BufferedImage অবজেক্ট ফিরিয়ে দেবে৷

  • সবশেষে, toFXImage()কে আহ্বান করুন SwingFXUtils এর পদ্ধতি বাফারড ইমেজ পাস করে ক্লাস একটি প্যারামিটার হিসাবে পূর্ববর্তী ধাপে প্রাপ্ত বস্তু।

উদাহরণ

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.imgcodecs.Imgcodecs;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.WritableImage;
public class Mat2WritableImage {
   public static WritableImage Mat2WritableImage(Mat mat) throws IOException{
      //Encoding the image
      MatOfByte matOfByte = new MatOfByte();
      Imgcodecs.imencode(".jpg", mat, matOfByte);
      //Storing the encoded Mat in a byte array
      byte[] byteArray = matOfByte.toArray();
      //Preparing the Buffered Image
      InputStream in = new ByteArrayInputStream(byteArray);
      BufferedImage bufImage = ImageIO.read(in);
      System.out.println("Image Loaded");
      WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);
      return writableImage;
   }
   public static void main(String args[]) throws Exception {
      //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      //Reading the Image from the file
      String file = "C:/EXAMPLES/OpenCV/sample.jpg";
      Mat image = Imgcodecs.imread(file);
      WritableImage obj = Mat2WritableImage(image);
      System.out.println(obj);
   }
}

আউটপুট

Image Loaded
javafx.scene.image.WritableImage@142269f2

  1. ওপেনসিভি লাইব্রেরি ব্যবহার করে কীভাবে একটি ইতিবাচক চিত্রকে নেতিবাচক রূপান্তর করবেন?

  2. জাভা ওপেনসিভি লাইব্রেরি ব্যবহার করে কীভাবে একটি রঙিন চিত্রকে নীল/সবুজ/লাল ছবিতে রূপান্তর করবেন?

  3. কীভাবে জাভা ওপেনসিভি লাইব্রেরি ব্যবহার করে একটি রঙিন চিত্রকে গ্রেস্কেলে রূপান্তর করবেন?

  4. কিভাবে একটি PyTorch Tensor একটি ইমেজ রূপান্তর?