Computer >> Máy Tính >  >> Lập trình >> Java

Làm cách nào để thêm nhiễu vào hình ảnh bằng thư viện Java OpenCV?


Để thêm nhiễu cho một hình ảnh nhất định bằng OpenCV -

  • Đọc nội dung của hình ảnh đã cho với đối tượng Mat.

  • Tạo thêm hai ma trận trống để lưu trữ nhiễu và ma trận kết quả.

  • Tạo hai ma trận MatOfDouble để lưu trữ giá trị trung bình và độ lệch chuẩn.

  • Nhận các giá trị trung bình và độ lệch chuẩn bằng cách sử dụng phương thức meanStdDev ().

  • Tạo ma trận với các phần tử ngẫu nhiên (để lưu trữ nhiễu) bằng phương thức randn ().

  • Đối với phương pháp này, hãy chuyển đối tượng nguồn, trung bình và độ lệch chuẩn được tạo ở trên.

Cuối cùng, thêm ma trận nhiễu và ma trận nguồn và lưu dưới dạng đích.

Ví dụ

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfDouble;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
public class AddingNoise extends Application {
   public void start(Stage stage) throws IOException {
      //Loading the OpenCV core library
      System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
      //Reading the Image from the file
      String file ="D://images//elephant.jpg";
      Mat src = Imgcodecs.imread(file);
      System.out.println("Image Loaded");
      //Creating destination matrix
      Mat dst = new Mat(src.rows(), src.cols(), src.type());
      //Creating a matrix for the noise
      Mat noise = new Mat(src.rows(), src.cols(), src.type());
      //Calculating the mean and standard deviation
      MatOfDouble mean = new MatOfDouble();
      MatOfDouble dev = new MatOfDouble();
      Core.meanStdDev(src, mean, dev);
      //Filling the noise matrix
      Core.randn(noise, mean.get(0,0)[0], dev.get(0,0)[0]);
      //Adding noise to the destination
      Core.add(src, noise, dst);
      //Converting matrix to JavaFX writable image
      Image img = HighGui.toBufferedImage(dst);
      WritableImage writableImage= SwingFXUtils.toFXImage((BufferedImage) img, null);
      //Setting the image view
      ImageView imageView = new ImageView(writableImage);
      imageView.setX(10);
      imageView.setY(10);
      imageView.setFitWidth(575);
      imageView.setPreserveRatio(true);
      //Setting the Scene object
      Group root = new Group(imageView);
      Scene scene = new Scene(root, 595, 400);
      stage.setTitle("Adding Noise Example");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]) {
      launch(args);
   }
}

Hình ảnh đầu vào

Làm cách nào để thêm nhiễu vào hình ảnh bằng thư viện Java OpenCV?

Đầu ra

Khi thực thi, chương trình trên tạo ra kết quả sau -

Làm cách nào để thêm nhiễu vào hình ảnh bằng thư viện Java OpenCV?