- OpenCV - Home
- OpenCV - Overview
- OpenCV - Environment
- OpenCV - Storing Images
- OpenCV - Reading Images
- OpenCV - Writing an Image
- OpenCV - GUI
- Image Conversion
- Colored Images to GrayScale
- OpenCV - Colored Image to Binary
- OpenCV - Grayscale to Binary
- Drawing Functions
- OpenCV - Drawing a Circle
- OpenCV - Drawing a Line
- OpenCV - Drawing a Rectangle
- OpenCV - Drawing an Ellipse
- OpenCV - Drawing Polylines
- OpenCV - Drawing Convex Polylines
- OpenCV - Drawing Arrowed Lines
- OpenCV - Adding Text
- Filtering
- OpenCV - Bilateral Filter
- OpenCV - Box Filter
- OpenCV - SQRBox Filter
- OpenCV - Filter2D
- OpenCV - Dilation
- OpenCV - Erosion
- OpenCV - Morphological Operations
- OpenCV - Image Pyramids
- Sobel Derivatives
- OpenCV - Sobel Operator
- OpenCV - Scharr Operator
- Transformation Operations
- OpenCV - Laplacian Transformation
- OpenCV - Distance Transformation
- Camera and Face Detection
- OpenCV - Using Camera
- OpenCV - Face Detection in a Picture
- Face Detection using Camera
- Geometric Transformations
- OpenCV - Affine Translation
- OpenCV - Rotation
- OpenCV - Scaling
- OpenCV - Color Maps
- Miscellaneous Chapters
- OpenCV - Canny Edge Detection
- OpenCV - Hough Line Transform
- OpenCV - Histogram Equalization
- OpenCV Useful Resources
- OpenCV - Quick Guide
- OpenCV - Cheatsheet
- OpenCV - Useful Resources
- OpenCV - Discussion
OpenCV - Grayscale to Binary
You can use the same method mentioned in the previous chapter to convert a grayscale image to a binary image. Just pass the path for a grayscale image as input to this program.
Example
The following program demonstrates how to read a grayscale image as a binary image and display it using JavaFX window.
import java.awt.image.BufferedImage;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
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;
public class GrayScaleToBinary extends Application {
@Override
public void start(Stage stage) throws Exception {
WritableImage writableImage = loadAndConvert();
// Setting the image view
ImageView imageView = new ImageView(writableImage);
// Setting the position of the image
imageView.setX(10);
imageView.setY(10);
// Setting the fit height and width of the image view
imageView.setFitHeight(400);
imageView.setFitWidth(600);
// Setting the preserve ratio of the image view
imageView.setPreserveRatio(true);
// Creating a Group object
Group root = new Group(imageView);
// Creating a scene object
Scene scene = new Scene(root, 600, 400);
// Setting title to the Stage
stage.setTitle("Grayscale to binary image");
// Adding scene to the stage
stage.setScene(scene);
// Displaying the contents of the stage
stage.show();
}
public WritableImage loadAndConvert() throws Exception {
// Loading the OpenCV core library
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// Instantiating the imagecodecs class
Imgcodecs imageCodecs = new Imgcodecs();
String input = "E:/OpenCV/chap7/grayscale.jpg";
// Reading the image
Mat src="/?originalUrl=https%3A%2F%2Fwww.tutorialspoint.com%2FimageCodecs.imread(input)%3B%2520%2520%2520%2520%2520%2520%2F%2F%2520Creating%2520the%2520destination%2520matrix%2520%2520%2520%2520%2520%2520Mat%2520dst%2520%3D%2520new%2520Mat()%3B%2520%2520%2520%2520%2520%2520%2F%2F%2520Converting%2520to%2520binary%2520image...%2520%2520%2520%2520%2520%2520Imgproc.threshold(src%2C%2520dst%2C%2520200%2C%2520500%2C%2520Imgproc.THRESH_BINARY)%3B%2520%2520%2520%2520%2520%2520%2F%2F%2520Extracting%2520data%2520from%2520the%2520transformed%2520image%2520(dst)%2520%2520%2520%2520%2520%2520byte%5B%5D%2520data1%2520%3D%2520new%2520byte%5Bdst.rows()%2520*%2520dst.cols()%2520*%2520(int)(dst.elemSize())%5D%3B%2520%2520%2520%2520%2520%2520dst.get(0%2C%25200%2C%2520data1)%3B%2520%2520%2520%2520%2520%2520%2F%2F%2520Creating%2520Buffered%2520image%2520using%2520the%2520data%2520%2520%2520%2520%2520%2520BufferedImage%2520bufImage%2520%3D%2520new%2520BufferedImage(dst.cols()%2Cdst.rows()%2C%2520%2520%2520%2520%2520%2520%2520%2520%2520%2520BufferedImage.TYPE_BYTE_BINARY)%3B%2520%2520%2520%2520%2520%2520%2F%2F%2520Setting%2520the%2520data%2520elements%2520to%2520the%2520image%2520%2520%2520%2520%2520%2520bufImage.getRaster().setDataElements(0%2C%25200%2C%2520dst.cols()%2C%2520dst.rows()%2C%2520data1)%3B%2520%2520%2520%2520%2520%2520%2F%2F%2520Creating%2520a%2520Writable%2520image%2520%2520%2520%2520%2520%2520WritableImage%2520writableImage%2520%3D%2520SwingFXUtils.toFXImage(bufImage%2C%2520null)%3B%2520%2520%2520%2520%2520%2520System.out.println("Converted to binary");
return writableImage;
}
public static void main(String args[]) throws Exception {
launch(args);
}
}
Input Image
Assume that following is the input image sample.jpg specified in the above program.
Output Image
On executing the program, you will get the following output.
Advertisements