यदि आप OpenCV imread() मेथड का उपयोग करके छवि पढ़ने का प्रयास करते हैं तो यह एक Mat ऑब्जेक्ट लौटाता है। यदि आप परिणामी Mat ऑब्जेक्ट की सामग्री को JavaFX विंडो का उपयोग करके प्रदर्शित करना चाहते हैं तो आपको 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("Image Loaded");
WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);
return writableImage;
}
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);
WritableImage obj = Mat2WritableImage(image);
System.out.println(obj);
}
}
आउटपुट
Image Loaded javafx.scene.image.WritableImage@142269f2