যদি আপনি ওপেনসিভি imread() মেথড ব্যবহার করে একটি ইমেজ পড়তে চান তবে এটি একটি Mat অবজেক্ট রিটার্ন করে। যদি আপনি ফলাফল Mat অবজেক্টের কন্টেন্ট একটি জাভाएফএক্স উইন্ডো ব্যবহার করে প্রদর্শন করতে চান তবে আপনাকে Mat অবজেক্টটিকে javafx.scene.image.WritableImage ক্লাসের একটি অবজেক্টে রূপান্তর করতে হবে। ऐसा করতে হলে আপনাকে নিচের ধাপগুলো অনুসরণ করতে হবে:
Mat কে MatOfByte-এ এনকোড করুন - প্রথমে, আপনাকে ম্যাট্রিক্সকে বাইটের ম্যাট্রিক্সে রূপান্তর করতে হবে। আপনি এটি Imgcodecs ক্লাসের imencode() মেথড ব্যবহার করে করতে পারেন।
এই মেথড একটি স্ট্রিং প্যারামিটার (ইমেজ ফরম্যাট নির্দিষ্ট করে), একটি Mat অবজেক্ট (চিত্রটি উপস্থাপন করে), একটি MatOfByte অবজেক্ট গ্রহণ করে।
MatOfByte অবজেক্টকে বাইট অ্যারেতে রূপান্তর করুন - toArray() মেথড ব্যবহার করে MatOfByte অবজেক্টটিকে একটি বাইট অ্যারেতে রূপান্তর করুন।
ByteArrayInputStream ইনস্ট্যানশিয়েট করুন - পূর্বের ধাপে তৈরি করা বাইট অ্যারে এর কনস্ট্রাক্টরএ পাস করে ByteArrayInputStream ক্লাসটি ইনস্ট্যানশিয়েট করুন।
BufferedImage অবজেক্ট তৈরি করুন - ImageIO ক্লাসের read() মেথডে পূর্বের ধাপে তৈরি করা ইনপুট স্ট্রিম অবজেক্টটি পাস করুন। এটি একটি BufferedImage অবজেক্ট রিটার্ন করবে।
অবশেষে, SwingFXUtils ক্লাসের toFXImage() মেথড আহ্বান করুন এবং পূর্বের ধাপে প্রাপ্ত BufferedImage অবজেক্টটি প্যারামিটার হিসেবে পাস করুন।
উদাহরণ
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 {
// ইমেজ এনকোড করা
MatOfByte matOfByte = new MatOfByte();
Imgcodecs.imencode(".jpg", mat, matOfByte);
// এনকোড করা Mat কে বাইট অ্যারেতে সংরক্ষণ
byte[] byteArray = matOfByte.toArray();
// Buffered Image তৈরি
InputStream in = new ByteArrayInputStream(byteArray);
BufferedImage bufImage = ImageIO.read(in);
System.out.println("ইমেজ লোডেড");
WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);
return writableImage;
}
public static void main(String args[]) throws Exception {
// ওপেনসিভি কোর লাইব্রেরি লোড করা
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// ফাইল থেকে ইমেজ পড়া
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