×
OpenCV教程OpenCV简介OpenCV开发环境配置OpenCV存储图像OpenCV读取图像OpenCV写入图像OpenCV用户界面

图像类型

OpenCV MREAD_XXX标记OpenCV将图像读取为灰度OpenCV读取图像为BGR

图像转换

OpenCV彩色图像转为灰度OpenCV彩色图像转为二进制OpenCV灰度转为二进制

绘图函数

OpenCV绘制圆形OpenCV绘制线条OpenCV绘制四方形OpenCV绘制椭圆形OpenCV绘制折线OpenCV绘制凸折线OpenCV绘制箭头线OpenCV添加文本

模糊功能

OpenCV模糊(平滑)OpenCV高斯模糊OpenCV中位模糊

过滤功能

OpenCV双边滤镜OpenCV箱式滤镜OpenCV SQRBox滤镜OpenCV Filter2DOpenCV扩张OpenCV侵蚀OpenCV形态学操作OpenCV图像金字塔

阈值

OpenCV简单阈值OpenCV自适应阈值

索贝尔衍生品

OpenCV添加边框OpenCV索贝尔操作OpenCV Scharr操作

变换操作

OpenCV拉普拉斯变换OpenCV距离转换

相机和人脸检测

OpenCV使用摄像头OpenCV图片人脸检测OpenCV摄像头人脸检测

几何变换

OpenCV仿射转换OpenCV旋转OpenCV缩放OpenCV彩色映射图

杂篇

OpenCV Canny边缘检测OpenCV霍夫线变换OpenCV直方图均衡

OpenCV彩色图像转为二进制


使用threshold()方法将灰度图像转换为二进制值图像。以下是此方法的语法。

threshold(Mat src, Mat dst, double thresh, double maxval, int type)

该方法接受以下参数 -

  • mat - 表示输入图像的Mat对象。
  • dst - 表示输出图像的Mat对象。
  • thresh - 表示阈值的整数。
  • maxval - 一个整数,表示与THRESH_BINARYTHRESH_BINARY_INV阈值类型一起使用的最大值。
  • type - 表示转换类型的整数代码,例如RGB到灰度。

通过将代码Imgproc.THRESH_BINARY与值一起传递给其余参数,可以将灰度图像转换为二值图像。

示例

以下程序演示如何将彩色图像作为二进制图像读取并使用JavaFX窗口显示。

package yiibai.com;

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 ColorToBinary 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("Loading an 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 Imgcodecs class
      Imgcodecs imageCodecs = new Imgcodecs();

      // File input = new File("C:/EXAMPLES/OpenCV/sample.jpg");
      String input = "F:/worksp/opencv/images/sample.jpg";

      // Reading the image
      Mat src = imageCodecs.imread(input);

      // Creating the destination matrix
      Mat dst = new Mat();

      // Converting to binary image...
      Imgproc.threshold(src, dst, 200, 500, Imgproc.THRESH_BINARY);

      // Extracting data from the transformed image (dst)
      byte[] data1 = new byte[dst.rows() * dst.cols() * (int)(dst.elemSize())];
      dst.get(0, 0, data1);

      // Creating Buffered image using the data
      BufferedImage bufImage = new BufferedImage(dst.cols(),dst.rows(), 
         BufferedImage.TYPE_BYTE_GRAY);

      // Setting the data elements to the image
      bufImage.getRaster().setDataElements(0, 0, dst.cols(), dst.rows(), data1);

      // Creating a Writable image
      WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);

      System.out.println("Converted to binary");
      return writableImage;
   }  
   public static void main(String args[]) throws Exception {
      launch(args);
   }
}

输入图像,假定以下是上述程序中指定的输入图像sample.jpg

在执行程序时,您将得到以下输出。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)