Java将BufferedImage对象转为javacv中的Mat类型

思路

先将BufferedImage统一转化为RGB格式,再将其转换为Mat类型。

Java实现代码

package site.zytech.picturematch.tools;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import javax.imageio.ImageIO;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import org.bytedeco.opencv.opencv_core.Mat;

import static org.bytedeco.opencv.global.opencv_core.*;
import static org.bytedeco.opencv.global.opencv_highgui.*;
import static org.bytedeco.opencv.global.opencv_imgproc.*;

/**
 * @author 作者: Alderaan
 * @version 创建时间:2022年1月25日 下午4:40:52
 *
 */
public class testconvert
{
	/**
	 * BufferedImage均转为TYPE_3BYTE_BGR,RGB格式
	 * 
	 * @param input 未知格式BufferedImage图片
	 * @return TYPE_3BYTE_BGR格式的BufferedImage图片
	 */
	public static BufferedImage converttoRGBformat(BufferedImage input)
	{
		if (null == input)
		{
			throw new NullPointerException("BufferedImage input can not be null!");
		}
		if (BufferedImage.TYPE_3BYTE_BGR != input.getType())
		{
			BufferedImage input_rgb = new BufferedImage(input.getWidth(), input.getHeight(),
					BufferedImage.TYPE_3BYTE_BGR);
			new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_sRGB), null).filter(input, input_rgb);
			return input_rgb;
		} else
		{
			return input;
		}
	}

	public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException
	{
		BufferedImage bimg1 = null;
		try
		{
			bimg1 = ImageIO.read(new File("/Lena.png")); // 修改为自己图片的路径
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		bimg1 = converttoRGBformat(bimg1); // BufferedImage convert to TYPE_3BYTE_BGR(RGB格式)

		byte[] image_rgb = (byte[]) bimg1.getData().getDataElements(0, 0, bimg1.getWidth(), bimg1.getHeight(), null);

		Mat bimg1_mat;

		bimg1_mat = new Mat(bimg1.getHeight(), bimg1.getWidth(), CV_8UC3);

		bimg1_mat.data().put(image_rgb);
		cvtColor(bimg1_mat, bimg1_mat, COLOR_RGB2BGR); // RGB转BGR

		imshow("Lena", bimg1_mat);
		waitKey(0);
	}
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
BufferedImageJava的一个类,它表示一个可变大小、可变图像的缓冲区。在Java图形用户界面(GUI)和游戏开发BufferedImage被广泛用于图像处理和绘制。 以下是BufferedImage的一些重要对象、接口和方法: 1. BufferedImage对象:它表示一个图像缓冲区,可以用来存储、操作和显示图像。BufferedImage有多种构造方法,可以根据不同的需求创建不同类型的图像。 2. ColorModel接口:它定义了图像的颜色模型,即图像的颜色空间和颜色深度。ColorModel接口有多种实现类,可以用来表示不同类型的颜色模型,如RGB、CMYK等。 3. Raster对象:它表示一个二维像素矩阵,是BufferedImage存储图像数据的核心对象。Raster对象包含了图像的像素数据和其它元数据,如图像的大小、颜色空间等。 4. Graphics2D类:它是Java 2D API的一个类,用于图形绘制和渲染。当我们需要在BufferedImage上进行绘制操作时,可以通过Graphics2D类来实现。 5. getRGB()和setRGB()方法:它们是BufferedImage用于读取和设置像素值的方法。getRGB()方法可以返回指定像素的颜色值,setRGB()方法可以设置指定像素的颜色值。 6. createGraphics()方法:它是BufferedImage用于创建Graphics2D对象的方法。通过调用createGraphics()方法,我们可以在BufferedImage上进行绘制操作。 7. getWidth()和getHeight()方法:它们是BufferedImage用于获取图像宽度和高度的方法。getWidth()方法返回图像的宽度,getHeight()方法返回图像的高度。 8. getType()方法:它是BufferedImage用于获取图像类型的方法。getType()方法返回一个整数,用于表示图像的类型,如TYPE_INT_RGB表示一个RGB颜色空间的图像。 总之,BufferedImage类与Java 2D API密切相关,它提供了一种方便、高效的方式来处理和显示图像。通过使用BufferedImage,我们可以轻松地实现图像的处理、绘制和显示。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值