opencv 使用java mat 转 base64 两种方式

Mat先转文件再转Base64


	private static String ImageToBase64(String imgPath) {
		byte[] data = null;
		// 读取图片字节数组
		try {
			InputStream in = new FileInputStream(imgPath);
			data = new byte[in.available()];
			in.read(data);
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 对字节数组Base64编码
		BASE64Encoder encoder = new BASE64Encoder();
		String base64Ret = encoder.encode(Objects.requireNonNull(data));
		// 返回Base64编码过的字节数组字符串
		System.out.println("本地图片转换Base64:" + ret);
		return base64Ret;
	}
private static String MatToBase64(Mat capImg){

    Imgcodecs.imwrite(tmpFilePath + "tmp.jpg", capImg);
	String base64 = ImageToBase64(tmpFilePath + "tmp.jpg");
}

Mat直接转Base64

                       

private String MatToBase64(Mat capImg){
  
    String jpg_base64 = null;
    Imgcodecs.imwrite(tmpFilePath + "tmp.jpg", capImg);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(mat2BI(capImg), "jpg", baos);
    byte[] bytes = baos.toByteArray();
    BASE64Encoder encoder = new BASE64Encoder();
    jpg_base64 = encoder.encodeBuffer(Objects.requireNonNull(bytes));
    System.out.println("MAT转换Base64:" + jpg_base64);
    return jpg_base64;
}

	private BufferedImage mat2BI(Mat mat) {
		int dataSize = mat.cols() * mat.rows() * (int) mat.elemSize();
		byte[] data = new byte[dataSize];
		mat.get(0, 0, data);
		int type = mat.channels() == 1 ? BufferedImage.TYPE_BYTE_GRAY :         
        BufferedImage.TYPE_3BYTE_BGR;

		if (type == BufferedImage.TYPE_3BYTE_BGR) {
			for (int i = 0; i < dataSize; i += 3) {
				byte blue = data[i + 0];
				data[i + 0] = data[i + 2];
				data[i + 2] = blue;
			}
		}
		BufferedImage image = new BufferedImage(mat.cols(), mat.rows(), type);
		image.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), data);

		return image;
	}