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);
	}
}

上一篇:python输入一行字符串,分别统计其中的英文字母,空格数字,和其他字符


下一篇:Python之数据基本运算