Canny এজ ডিটেক্টরকে অপ্টিমাল ডিটেক্টর বলা হয় কারণ এটি শুধু বিদ্যমান এজ ডিটেক্ট করে, প্রতি পেজে শুধু এক রেসপন্স দেয় এবং এজ পিক্সেল এবং ডিটেক্টেড পিক্সেলের দূরত্ব মিনিমাইজ করে।
Imgproc ক্লাসের Canny() মেথড দেওয়া ইমেজে ক্যানি এজ ডিটেকশন অ্যালগরিদম প্রয়োগ করে। এই মেথড গ্রহণ করে:
- দুটি Mat অবজেক্ট যা সোর্স এবং ডেস্টিনেশন ইমেজকে প্রতিনিধিত্ব করে।
- দুটি ডাবল ভেরিয়েবল যা থ্রেশহোল্ড ভ্যালু ধারণ করে।
Canny এজ ডিটেক্টর ব্যবহার করে একটি ইমেজের এজ ডিটেক্ট করতে:
- imread() মেথড ব্যবহার করে সোর্স ইমেজের কন্টেন্ট পড়ুন (Imgcodecs ক্লাসের)।
- cvtColor() মেথড ব্যবহার করে এটাকে গ্রে স্কেল ইমেজে কনভার্ট করুন (Imgproc ক্লাসের)।
- blur() মেথড ব্যবহার করে রেজাল্টেন্ট (গ্রে) ইমেজ ব্লার করুন (Imgproc ক্লাসের, কার্নেল ভ্যালু ৩)।
- canny() মেথড ব্যবহার করে ব্লারড ইমেজে ক্যানি এজ ডিটেকশন অ্যালগরিদম প্রয়োগ করুন (Imgproc ক্লাসের)।
- সকল মান ০ হওয়া একটি খালি ম্যাট্রিক্স তৈরি করুন।
- copyTo() মেথড ব্যবহার করে ডিটেক্টেড এজগুলো তামাকে যোগ করুন (Mat ক্লাসের)।
উদাহরণ
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.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class EdgeDetection extends Application {
public void start(Stage stage) throws IOException {
// OpenCV কোর লাইব্রেরি লোড করা
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
String file = "D:\\Images\\win2.jpg";
Mat src = Imgcodecs.imread(file);
// এজ, সোর্স, ডেস্টিনেশন স্টোর করার জন্য খালি ম্যাট্রিক্স
Mat gray = new Mat(src.rows(), src.cols(), src.type());
Mat edges = new Mat(src.rows(), src.cols(), src.type());
Mat dst = new Mat(src.rows(), src.cols(), src.type(), new Scalar(0));
// ইমেজকে গ্রে-তে কনভার্ট
Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGB2GRAY);
// ইমেজ ব্লার করা
Imgproc.blur(gray, edges, new Size(3, 3));
// এজ ডিটেক্ট করা
Imgproc.Canny(edges, edges, 100, 100*3);
// ডিটেক্টেড এজ ডেস্টিনেশন ম্যাট্রিক্সে কপি
src.copyTo(dst, edges);
// ম্যাট্রিক্সকে JavaFX writable ইমেজে কনভার্ট
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);
// Scene অবজেক্ট সেট করা
Group root = new Group(imageView);
Scene scene = new Scene(root, 595, 400);
stage.setTitle("Gaussian Blur Example");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
ইনপুট ইমেজ

আউটপুট
প্রোগ্রাম এক্সিকিউট করলে নিচের আউটপুট পাওয়া যায়:
