BGR模式:
opencv 默认的读取的图片是按照BGR通道读取的,但是现在很多场景下使用的RGB。
Java代码:
本例仍采用JavaFX该平台作为展示平台,下面是Controller层内容:
public class Controller{@FXML private Text fxText;@FXML private ImageView imageView;@FXML public void handleButtonEvent(ActionEvent actionEvent) {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);imageView.setImage(this.toBGR(file.getPath()));}private WritableImage toBGR(String filePath){System.loadLibrary(Core.NATIVE_LIBRARY_NAME);Imgcodecs imageCodecs = new Imgcodecs();String input = filePath;Mat src = imageCodecs.imread(input, Imgcodecs.IMREAD_COLOR);byte[] data = new byte[src.rows() * src.cols() * (int) (src.elemSize())];src.get(0, 0, data);BufferedImage bufImage = new BufferedImage(src.cols(), src.rows(), BufferedImage.TYPE_3BYTE_BGR);bufImage.getRaster().setDataElements(0, 0, src.cols(), src.rows(), data);WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);return writableImage;}}
运行图:
注:原图来自于1972年11月期《花花公子》杂志模特Lenna,因其敏感性读者可自行上网搜索原图。