Обработка изображений в Java — повышение резкости

Опубликовано: 15 Сентября, 2022

Предпосылки:

  • Обработка изображений в Java — чтение и запись
  • Обработка изображений в Java — получение и установка пикселей
  • Обработка изображений в Java — преобразование цветного изображения в изображение в градациях серого
  • Обработка изображений в Java — преобразование цветного изображения в негативное изображение
  • Обработка изображений в Java — преобразование цветных изображений в красные, зеленые, синие
  • Обработка изображений в Java — преобразование цветного изображения в изображение сепии
  • Обработка изображений в Java — создание случайного пиксельного изображения
  • Обработка изображений в Java — создание зеркального изображения
  • Обработка изображений в Java — распознавание лиц
  • Обработка изображений в Java — водяные знаки на изображении
  • Обработка изображений в Java — изменение ориентации изображения
  • Обработка изображений в Java — повышение контрастности
  • Обработка изображений в Java — повышение яркости
  • Обработка изображений в Java — сравнение двух изображений

 Tip: It is recommended to use eclipse for the same since it is easy to use and set up.

Здесь мы будем использовать фильтр Гаусса. Этот фильтр уменьшает шум на изображении и делает его лучше (или с более высоким разрешением). Выполните предварительные условия установки OpenCV и настройки в соответствии с ОС на вашем локальном компьютере, чтобы написать код, поскольку мы будем импортировать библиотеки. Итак, давайте обсудим предыдущие методы, необходимые для повышения резкости.

Метод 1: GaussianBlur(): этот метод находится в пакете Imgproc OpenCv.

Синтаксис:

Imgproc.GaussianBlur(source, destination, new Size(0, 0), sigmaX)

Параметры:

  • Исходное изображение
  • Изображение назначения
  • Гауссовский размер ядра
  • Стандартное отклонение ядра Гаусса в направлении X

Метод 2: addWeighted(): этот метод находится в пакете Core OpenCV.

Синтаксис:

Core.addWeighted(InputArray src1, alpha, src2, beta, gamma, OutputArray dst)

Параметры:

  • Первый входной массив
  • Вес первых элементов массива
  • Второй входной массив того же размера и номера канала, что и src1
  • Вес вторых элементов массива
  • Скаляр добавляется к каждой сумме
  • Выходной массив, который имеет тот же размер и количество каналов, что и входные массивы.

Метод 3: imread(): он используется для чтения изображений как объектов Mat, которые визуализируются OpenCV.

Синтаксис:

Imgcodecs.imread(filename);

Параметры: Имя файла изображения. Если изображение находится в другом каталоге, необходимо указать полный путь к изображению.

Метод 4: imwrite(): Он используется для записи объектов Mat в файл изображения.

Синтаксис:

Imgcodecs.imwrite(filename, mat_img);

Параметры:

  • Имя файла изображения. Если изображение находится в другом каталоге, необходимо указать полный путь к изображению.
  • Результирующий матовый объект.

Реализация: Входное изображение выглядит следующим образом:

Пример

Java




// Java Program to Enhance Sharpness in An Image
// Using OpenCV Library
 
// Importing package module
package ocv;
 
// Importing require classes
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
 
// Main class
public class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Try block to check for exceptions
        try {
 
            // For proper execution of native libraries
            // Core.NATIVE_LIBRARY_NAME must be loaded
            // before calling any of the opencv methods
            System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
 
            // Reading the input image from local directory
            // by creating object of Mat class
            Mat source = Imgcodecs.imread(
                "E://input.jpg",
                Imgcodecs.CV_LOAD_IMAGE_COLOR);
           
            Mat destination
                = new Mat(source.rows(), source.cols(),
                          source.type());
 
            // Filtering
            Imgproc.GaussianBlur(source, destination,
                                 new Size(0, 0), 10);
            Core.addWeighted(source, 1.5, destination, -0.5,
                             0, destination);
 
            // Writing output image to directory in the local
            // system
            Imgcodecs.imwrite("E://output.jpg",
                              destination);
        }
 
        // Catch block to handle exceptions
        catch (Exception e) {
 
            // Display message when exception occurs
            System.out.print("Exception/s Occurred")
        }
    }
}


Выход:

Note: Do notice a minor improvement in resolution

Эта статья предоставлена Pratik Agarwal . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью write.geeksforgeeks.org или отправить ее по адресу review-team@geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.