Чтобы преобразовать цветное изображение в изображение в градациях серого с помощью OpenCV, мы читаем изображение в BufferedImage и преобразуем его в объект Mat . Его синтаксис приведен ниже —
File input = new File("digital_image_processing.jpg"); BufferedImage image = ImageIO.read(input); //convert Buffered Image to Mat.
Затем вы можете преобразовать изображение из RGB в формат Grayscale, используя метод cvtColor () в классе Imgproc . Его синтаксис приведен ниже —
Imgproc.cvtColor(source mat, destination mat1, Imgproc.COLOR_RGB2GRAY);
Метод cvtColor () принимает три параметра: матрицу исходного изображения, матрицу целевого изображения и тип преобразования цвета.
Помимо метода cvtColor, существуют другие методы, предоставляемые классом Imgproc. Они перечислены ниже —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (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 .