Phương thức convertTo() của lớp org.opencv.core.Mat chấp nhận 4 tham số theo thứ tự: mat (ma trận rỗng), rtype (nguyên), alpha (nguyên), beta (nguyên).
Tăng độ sáng – Giảm giá trị beta từ 0 về -255 (giữ alpha = 1).
Giảm độ sáng – Tăng giá trị beta từ 0 lên 255 (giữ alpha = 1).
Tăng độ tương phản – Tăng giá trị alpha từ 1 lên 100 (giữ beta = 0).
Giảm độ tương phản – Giảm giá trị alpha từ 1 xuống 0 (giữ beta = 0).
Ví dụ
Dưới đây là chương trình JavaFX với hai thanh trượt để điều chỉnh giá trị alpha và beta.
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.embed.swing.SwingFXUtils;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.imgcodecs.Imgcodecs;
public class AlphaBetaValuesJavaFX extends Application {
double contrast = 1;
private final int rtype = -1;
double alpha = 1;
double beta = 0;
Slider slider1;
Slider slider2;
Mat src = null;
public void start(Stage stage) throws IOException {
// Tải thư viện lõi OpenCV
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
String file = "D:\\Image\\lamma2.jpg";
src = Imgcodecs.imread(file);
WritableImage writableImage = loadImage(src);
// Thiết lập ImageView
ImageView imageView = new ImageView(writableImage);
imageView.setX(50);
imageView.setY(25);
imageView.setFitHeight(400);
imageView.setFitWidth(550);
imageView.setPreserveRatio(true);
Label label1 = new Label("Giá trị Alpha");
// Thiết lập Slider
slider1 = new Slider(0.1, 3, 1);
slider1.setShowTickLabels(true);
slider1.setShowTickMarks(true);
slider1.setMajorTickUnit(1);
slider1.setBlockIncrement(0.05);
// Thiết lập Label
Label label2 = new Label();
Label label3 = new Label("Giá trị Beta");
// Thiết lập Slider
slider2 = new Slider(-100, 100, 0);
slider2.setShowTickLabels(true);
slider2.setShowTickMarks(true);
slider2.setMajorTickUnit(25);
slider2.setBlockIncrement(10);
// Thiết lập Label
Label label4 = new Label();
// Listener cho slider alpha
slider1.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
try {
label2.setText("α-value: " + newValue);
alpha = newValue.doubleValue();
Mat dest = new Mat(src.rows(), src.cols(), src.type());
src.convertTo(dest, rtype, alpha, beta);
imageView.setImage(loadImage(dest));
} catch (Exception e) {
System.out.println("");
}
}
});
// Listener cho slider beta
slider2.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
try {
label4.setText("β-value: " + newValue);
beta = newValue.doubleValue();
Mat dest = new Mat(src.rows(), src.cols(), src.type());
src.convertTo(dest, rtype, alpha, beta);
imageView.setImage(loadImage(dest));
} catch (Exception e) {
System.out.println("");
}
}
});
// VBox để sắp xếp các thành phần
VBox vbox = new VBox();
vbox.setPadding(new Insets(20));
vbox.setSpacing(10);
vbox.getChildren().addAll(label1, slider1, label2, imageView, label3, slider2, label4);
// Tạo Scene
Scene scene = new Scene(vbox, 600, 580);
stage.setTitle("Tải hình ảnh");
stage.setScene(scene);
stage.show();
}
public WritableImage loadImage(Mat image) throws IOException {
MatOfByte matOfByte = new MatOfByte();
Imgcodecs.imencode(".jpg", image, matOfByte);
// Lưu ma trận đã mã hóa vào mảng byte
byte[] byteArray = matOfByte.toArray();
// Hiển thị hình ảnh
InputStream in = new ByteArrayInputStream(byteArray);
BufferedImage bufImage = ImageIO.read(in);
System.out.println("Ảnh đã tải");
WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);
return writableImage;
}
public static void main(String args[]) {
launch(args);
}
}
Ảnh đầu vào

Ảnh đầu ra
