जावा डीआईपी - ओपनसीवी ग्रेस्केल रूपांतरण

OpenCV का उपयोग करके एक रंग छवि को ग्रेस्केल छवि में बदलने के लिए, हमने छवि को पढ़ा BufferedImage और इसे में परिवर्तित करें Matवस्तु। इसका सिंटैक्स नीचे दिया गया है -

File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
//convert Buffered Image to Mat.

फिर आप विधि का उपयोग करके छवि को RGB से ग्रेस्केल प्रारूप में बदल सकते हैं cvtColor() में Imgprocकक्षा। इसका सिंटैक्स नीचे दिया गया है -

Imgproc.cvtColor(source mat, destination mat1, Imgproc.COLOR_RGB2GRAY);

प्रक्रिया cvtColor() तीन पैरामीटर लेता है जो स्रोत छवि मैट्रिक्स, गंतव्य छवि मैट्रिक्स, और रंग रूपांतरण प्रकार हैं।

CvtColor विधि के अलावा, Imgproc वर्ग द्वारा प्रदान की गई अन्य विधियाँ हैं। वे नीचे सूचीबद्ध हैं -

अनु क्रमांक। विधि और विवरण
1

cvtColor(Mat src, Mat dst, int code, int dstCn)

यह एक छवि को एक रंग स्थान से दूसरे में परिवर्तित करता है।

2

dilate(Mat src, Mat dst, Mat kernel)

यह एक विशिष्ट संरचना तत्व का उपयोग करके एक छवि को पतला करता है।

3

equalizeHist(Mat src, Mat dst)

यह एक स्केल इमेज के हिस्टोग्राम की बराबरी करता है।

4

filter2D(Mat src, Mat dst, int depth, Mat kernel, Point anchor, double delta)

यह कर्नेल के साथ एक छवि को दर्शाता है।

5

GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX)

यह एक गाऊसी फिल्टर का उपयोग करके एक छवि को धुंधला करता है।

6

integral(Mat src, Mat sum)

यह एक छवि के अभिन्न की गणना करता है।

उदाहरण

निम्न उदाहरण छवि को ग्रेस्केल में बदलने के लिए Imgproc वर्ग के उपयोग को दर्शाता है -

import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;

import java.io.File;
import javax.imageio.ImageIO;

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;

public class Main {
   public static void main( String[] args ) { 
   
      try {
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         File input = new File("digital_image_processing.jpg");
         BufferedImage image = ImageIO.read(input);	

         byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
         Mat mat = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC3);
         mat.put(0, 0, data);

         Mat mat1 = new Mat(image.getHeight(),image.getWidth(),CvType.CV_8UC1);
         Imgproc.cvtColor(mat, mat1, Imgproc.COLOR_RGB2GRAY);

         byte[] data1 = new byte[mat1.rows() * mat1.cols() * (int)(mat1.elemSize())];
         mat1.get(0, 0, data1);
         BufferedImage image1 = new BufferedImage(mat1.cols(),mat1.rows(), BufferedImage.TYPE_BYTE_GRAY);
         image1.getRaster().setDataElements(0, 0, mat1.cols(), mat1.rows(), data1);

         File ouptut = new File("grayscale.jpg");
         ImageIO.write(image1, "jpg", ouptut);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

उत्पादन

जब आप दिए गए उदाहरण को निष्पादित करते हैं, तो यह एक छवि नाम को परिवर्तित करता है digital_image_processing.jpg इसकी समतुल्य ग्रेस्केल छवि के लिए और इसे हार्ड डिस्क पर नाम के साथ लिखते हैं grayscale.jpg

मूल छवि

ग्रेस्केल छवि