কম্পিউটার টিউটোরিয়াল

জাভা এফএক্স ও ওপেনসিভি ব্যবহার করে চিত্রের উজ্জ্বলতা ও কন্ট্রাস্ট পরিবর্তন


org.opencv.core.Mat ক্লাসের convertTo() মেথড চারটি প্যারামিটার গ্রহণ করে: mat (খালি ম্যাট্রিক্স), rtype (ইন্টিজার), alpha (ইন্টিজার), 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 {
        // ওপেনসিভি কোর লাইব্রেরি লোড করা হচ্ছে
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        String file = "D:\\Image\\lamma2.jpg";
        src = Imgcodecs.imread(file);
        WritableImage writableImage = loadImage(src);
        
        // ইমেজ ভিউ সেট করা হচ্ছে
        ImageView imageView = new ImageView(writableImage);
        imageView.setX(50);
        imageView.setY(25);
        imageView.setFitHeight(400);
        imageView.setFitWidth(550);
        imageView.setPreserveRatio(true);
        
        Label label1 = new Label("Alpha value");
        
        // প্রথম স্লাইডার সেট করা হচ্ছে
        slider1 = new Slider(0.1, 3, 1);
        slider1.setShowTickLabels(true);
        slider1.setShowTickMarks(true);
        slider1.setMajorTickUnit(1);
        slider1.setBlockIncrement(0.05);
        
        Label label2 = new Label();
        Label label3 = new Label("Beta value");
        
        // দ্বিতীয় স্লাইডার সেট করা হচ্ছে
        slider2 = new Slider(-100, 100, 0);
        slider2.setShowTickLabels(true);
        slider2.setShowTickMarks(true);
        slider2.setMajorTickUnit(25);
        slider2.setBlockIncrement(10);
        
        Label label4 = new Label();
        
        // প্রথম স্লাইডারের লিসেনার
        slider1.valueProperty().addListener(new ChangeListener() {
            public void changed(ObservableValue 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("");
                }
            }
        });
        
        // দ্বিতীয় স্লাইডারের লিসেনার
        slider2.valueProperty().addListener(new ChangeListener() {
            public void changed(ObservableValue 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
        VBox vbox = new VBox();
        vbox.setPadding(new Insets(20));
        vbox.setSpacing(10);
        vbox.getChildren().addAll(label1, slider1, label2, imageView, label3, slider2, label4);
        
        // সিন অবজেক্ট তৈরি
        Scene scene = new Scene(vbox, 600, 580);
        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);
        System.out.println("Image Loaded");
        WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);
        return writableImage;
    }
    
    public static void main(String args[]) {
        launch(args);
    }
}

ইনপুট চিত্র

জাভা এফএক্স ও ওপেনসিভি ব্যবহার করে চিত্রের উজ্জ্বলতা ও কন্ট্রাস্ট পরিবর্তন

আউটপুট

জাভা এফএক্স ও ওপেনসিভি ব্যবহার করে চিত্রের উজ্জ্বলতা ও কন্ট্রাস্ট পরিবর্তন


  1. জাভা এফএক্স (JavaFX) ও ওপেনসিভি ব্যবহার করে চিত্রের तीক্ষ্ণতা পরিবর্তন

  2. জাভা এফএক্স ও ওপেনসিভি ব্যবহার করে চিত্রের উজ্জ্বলতা কমানোর উদাহরণ

  3. জাভা ওপেনসিভি লাইব্রেরি ব্যবহার করে চিত্রের উজ্জ্বলতা পরিবর্তন

  4. জাভা ওপেনসিভি লাইব্রেরি ব্যবহার করে চিত্রের কন্ট্রাস্ট পরিবর্তন