যদি আপনি OpenCV imread() মেথড ব্যবহার করে একটি ইমেজ পড়তে চান তবে এটি একটি Mat অবজেক্ট রিটার্ন করে। যদি আপনি রেজাল্ট্যান্ট Mat অবজেক্টের কন্টেন্ট AWT/Swings উইন্ডোতে প্রদর্শন করতে চান তবে আপনাকে Mat অবজেক্টকে java.awt.image.BufferedImage ক্লাসের অবজেক্টে কনভার্ট করতে হবে। তা করতে নিচের ধাপগুলো অনুসরণ করুন:
- Mat কে MatOfByte-এ এনকোড করুন - প্রথমে, আপনাকে ম্যাট্রিক্সকে বাইটের ম্যাট্রিক্সে কনভার্ট করতে হবে। এটা Imgcodecs ক্লাসের imencode() মেথড ব্যবহার করে করা যায়। এই মেথড একটি স্ট্রিং প্যারামিটার (ইমেজ ফরম্যাট নির্দিষ্ট করে), একটি Mat অবজেক্ট (ইমেজকে প্রতিনিধিত্ব করে), একটি MatOfByte অবজেক্ট গ্রহণ করে।
- MatOfByte অবজেক্টকে বাইট অ্যারে-এ কনভার্ট করুন - toArray() মেথড ব্যবহার করে MatOfByte অবজেক্টকে একটি বাইট অ্যারে-এ কনভার্ট করুন।
- ByteArrayInputStream ইনস্ট্যানশিয়েট করুন - ByteArrayInputStream ক্লাসটি ইনস্ট্যানশিয়েট করুন, পূর্বের ধাপে তৈরি করা বাইট অ্যারে এর কনস্ট্রাক্টরের একটিতে পাস করে।
- BufferedImage অবজেক্ট তৈরি করুন - ImageIO ক্লাসের read() মেথডে পূর্বের ধাপে তৈরি করা Input Stream অবজেক্ট পাস করুন। এটি একটি 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;
public class Mat2BufferedImage {
public static BufferedImage Mat2BufferedImage(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);
return bufImage;
}
public static void main(String args[]) throws Exception {
// OpenCV কোর লাইব্রেরি লোড করা
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// ফাইল থেকে ইমেজ পড়া
String file = "C:/EXAMPLES/OpenCV/sample.jpg";
Mat image = Imgcodecs.imread(file);
BufferedImage obj = Mat2BufferedImage(image);
System.out.println(obj);
}
}
আউটপুট
BufferedImage@579bb367: type = 5 ColorModel: #pixelBits = 24 numComponents = 3 color space = java.awt.color.ICC_ColorSpace@1de0aca6 transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 500 height = 360 #numDataElements 3 dataOff[0] = 2