เมธอด convertTo() ใช้ปรับความสว่างและคอนทราสต์ รับพารามิเตอร์: mat (เมทริกซ์ปลายทาง), rtype (ประเภทเมทริกซ์), alpha (gain), beta (bias)
ถ้าค่า beta เป็นลบ (0 ถึง -255) จะลดความสว่างของภาพ
ตัวอย่างโปรแกรม
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 DecreaseBrightnessJavaFX extends Application {
double alpha = 1, beta = 0;
Slider slider;
Mat src = null;
final int rtype = -1;
int min = 0, max = 255, init = 255;
public void start(Stage stage) throws IOException {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
src = Imgcodecs.imread("D:\\Image\\cuba.jpg");
WritableImage img = loadImage(src);
ImageView view = new ImageView(img);
view.setFitHeight(400);
view.setFitWidth(550);
view.setPreserveRatio(true);
slider = new Slider(min, max, init);
slider.setShowTickLabels(true);
slider.setShowTickMarks(true);
slider.setMajorTickUnit(25);
slider.setBlockIncrement(10);
Label l1 = new Label(), l2 = new Label();
slider.valueProperty().addListener((obs, o, n) -> {
try {
alpha = n.doubleValue() / max;
beta = 1.0 - alpha;
l1.setText("α: " + alpha);
l2.setText("β: " + beta);
Mat dest = new Mat(src.rows(), src.cols(), src.type());
src.convertTo(dest, rtype, alpha, beta);
view.setImage(loadImage(dest));
} catch(Exception e) { e.printStackTrace(); }
});
VBox box = new VBox(10, l1, l2, slider, view);
box.setPadding(new Insets(20));
stage.setScene(new Scene(box, 600, 450));
stage.setTitle("ลดความสว่างภาพ");
stage.show();
}
WritableImage loadImage(Mat m) throws IOException {
MatOfByte mob = new MatOfByte();
Imgcodecs.imencode(".jpg", m, mob);
return SwingFXUtils.toFXImage(ImageIO.read(new ByteArrayInputStream(mob.toArray())), null);
}
public static void main(String[] args) { launch(args); }
}
ภาพอินพุตและเอาต์พุต
โปรแกรมแสดงสไลด์เดอร์ควบคุมการลดความสว่างภาพ แสดงค่า alpha และ beta แบบเรียลไทม์