OpenCV实现普通阈值

网友投稿 554 2022-11-22

OpenCV实现普通阈值

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 putfHATBLhGblic 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)", "*.http://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;

}

}

运行图

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:create-react-app 打包开启 gzip 压缩
下一篇:js算法题,树状数据倒推
相关文章

 发表评论

暂时没有评论,来抢沙发吧~