জাভা ব্যবহার করে চিত্রের উজ্জ্বলতা পরিবর্তন করার একটি উপায় হলো convertTo() মেথড ব্যবহার করা। এই মেথড চিত্রের কন্ট্রাস্ট ও উজ্জ্বলতা পরিবর্তনের জন্য দেওয়া ম্যাট্রিক্সের ওপর প্রয়োজনীয় গণনা করে। এই মেথড চারটি প্যারামিটার গ্রহণ করে:
mat - ফলাফল ধারণ করার জন্য খালি ম্যাট্রিক্স, যেটির আকার ও টাইপ সোর্স ম্যাট্রিক্সের সমান।
rtype - আউটপুট ম্যাট্রিক্সের টাইপ নির্দিষ্ট করার ইন্টিজার মান। যদি এই মান নেগেটিভ হয়, তবে টাইপ সোর্সের সমান হবে।
alpha - গেইন (gain) মান, যা ০ এর চেয়ে বড় হতে হবে (ডিফল্ট মান ১)।
beta - বায়াস (bias) মান (ডিফল্ট মান ০)।
যদি প্যারামিটার 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 DecreasingBrightnessJavaFX extends Application {
double contrast = 1;
private final int rtype = -1;
double alpha = 1;
double beta = 0;
Slider slider1;
int sliderMinVal = 0;
int sliderMaxVal = 255;
int sliderInitVal = 255;
Mat src = null;
public void start(Stage stage) throws IOException {
// ওপেনসিভি কোর লাইব্রেরি লোড করা হচ্ছে
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
String file = "D:\\Image\\cuba.jpg";
src = Imgcodecs.imread(file);
WritableImage writableImage = loadImage(src);
// ইমেজ ভিউ সেট করা হচ্ছে
ImageView imageView = new ImageView(writableImage);
imageView.setX(25);
imageView.setY(25);
imageView.setFitHeight(400);
imageView.setFitWidth(550);
imageView.setPreserveRatio(true);
// স্লাইডার সেট করা হচ্ছে
slider1 = new Slider(sliderMinVal, sliderMaxVal, sliderInitVal);
slider1.setShowTickLabels(true);
slider1.setShowTickMarks(true);
slider1.setMajorTickUnit(25);
slider1.setBlockIncrement(10);
Label label1 = new Label();
Label label2 = new Label();
// স্লাইডারের লিসেনার
slider1.valueProperty().addListener(new ChangeListener() {
public void changed(ObservableValue extends Number> observable, Number oldValue, Number newValue) {
try {
alpha = newValue.doubleValue();
Mat dest = new Mat(src.rows(), src.cols(), src.type());
alpha = (alpha / sliderMaxVal);
beta = 1.0 - alpha;
label1.setText("α-value: " + alpha);
label2.setText("β-value: " + beta);
src.convertTo(dest, rtype, alpha, beta);
imageView.setImage(loadImage(dest));
} catch(Exception e) {
System.out.println("");
}
}
});
// কম্পোনেন্ট সাজানোর জন্য VBox
VBox vbox = new VBox();
vbox.setPadding(new Insets(20));
vbox.setSpacing(10);
vbox.getChildren().addAll(label1, label2, slider1, imageView);
// সিন অবজেক্ট তৈরি
Scene scene = new Scene(vbox, 600, 450);
stage.setTitle("চিত্রের উজ্জ্বলতা কমানো");
stage.setScene(scene);
stage.show();
}
public WritableImage loadImage(Mat image) throws IOException {
MatOfByte matOfByte = new MatOfByte();
Imgcodecs.imencode(".jpg", image, matOfByte);
byte[] byteArray = matOfByte.toArray();
InputStream in = new ByteArrayInputStream(byteArray);
BufferedImage bufImage = ImageIO.read(in);
WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);
return writableImage;
}
public static void main(String args[]) {
launch(args);
}
}
ইনপুট

আউটপুট
