Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách xoay ảnh (rotate) bằng OpenCV Java

Dùng warpAffine() với ma trận xoay (rotation matrix) để xoay ảnh. Tạo ma trận xoay bằng Imgproc.getRotationMatrix2D(center, angle, scale).

Ví dụ (JavaFX)

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.Point;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class RotatingAnImage extends Application {
    public void start(Stage stage) throws IOException {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        String file = "D:\\Images\\elephant.jpg";
        Mat src = Imgcodecs.imread(file);
        Mat dst = new Mat(src.rows(), src.cols(), src.type());
        Point point = new Point(300, 200); // tâm xoay
        Mat rotationMatrix = Imgproc.getRotationMatrix2D(point, 30, 1); // góc 30 độ, scale 1
        Size size = new Size(src.cols(), src.cols());
        Imgproc.warpAffine(src, dst, rotationMatrix, size);
        Image img = HighGui.toBufferedImage(dst);
        WritableImage writableImage = SwingFXUtils.toFXImage((BufferedImage) img, null);
        ImageView imageView = new ImageView(writableImage);
        imageView.setX(10); imageView.setY(10);
        imageView.setFitWidth(575); imageView.setPreserveRatio(true);
        Group root = new Group(imageView);
        Scene scene = new Scene(root, 595, 400);
        stage.setTitle("Image Rotation Example");
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String args[]) { launch(args); }
}

Ảnh gốc

Cách xoay ảnh (rotate) bằng OpenCV Java

Ảnh sau xoay 30 độ

Cách xoay ảnh (rotate) bằng OpenCV Java