OpenCV实现普通阈值

普通阈值

阈值本质上就是对图像进行分割的一个过程。利用阈值二值化可对灰度或彩色图像进行像素数据分类。普通阈值即阈值二值化就是针对给定的图像,以T作为阈值进行分割的过程。在OpenCV中该类的实现依赖于threshold() 函数。下面是该函数的声明:

threshold(src, dst, thresh, maxval, type);

各参数解释

·src

表示此操作的源(输入图像)的Mat对象。

·mat

表示目标(输出)图像的类Mat的对象。

·thresh

表示阈值T。

·maxval

表示最大灰度值,一般为255。

·type

表示要使用的阈值类型的整数类型变量,阈值二值化为Imgproc.THRESH_BINARY。

其数学描述解释如下:

对于给定的src(x,y),若其像素值大于阈值T(thresh),则其返回像素最大值,否则为0。

那么dst其像素描述如下:

Java代码(JavaFX Controller层)

public class Controller{

@FXML private Text fxText;

@FXML private ImageView imageView;

@FXML private Label resultLabel;

@FXML public void handleButtonEvent(ActionEvent actionEvent) throws IOException {

Node source = (Node) actionEvent.getSource();

Window theStage = source.getScene().getWindow();

FileChooser fileChooser = new FileChooser();

FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.png");

fileChooser.getExtensionFilters().add(extFilter);

fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("JPG Files(*.jpg)", "*.jpg"));

File file = fileChooser.showOpenDialog(theStage);

runInSubThread(file.getPath());

}

private void runInSubThread(String filePath){

new Thread(new Runnable() {

@Override

public void run() {

try {

WritableImage writableImage = thresholdOfBinary(filePath);

Platform.runLater(new Runnable() {

@Override

public void run() {

imageView.setImage(writableImage);

}

});

} catch (IOException e) {

e.printStackTrace();

}

}

}).start();

}

private WritableImage thresholdOfBinary(String filePath) throws IOException {

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Mat src = Imgcodecs.imread(filePath);

Mat dst = new Mat();

Imgproc.threshold(src, dst, 150, 255, Imgproc.THRESH_BINARY);

MatOfByte matOfByte = new MatOfByte();

Imgcodecs.imencode(".jpg", dst, matOfByte);

byte[] bytes = matOfByte.toArray();

InputStream in = new ByteArrayInputStream(bytes);

BufferedImage bufImage = ImageIO.read(in);

WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);

return writableImage;

}

}

运行图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 OpenCV实现普通阈值 的全部内容, 来源链接: utcz.com/p/250792.html

回到顶部