ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-01-25 17:02:51  阅读:345  来源: 互联网

标签:bimg1 Java Mat BufferedImage opencv BGR import input


思路

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

标签:bimg1,Java,Mat,BufferedImage,opencv,BGR,import,input
来源: https://blog.csdn.net/GerZhouGengCheng/article/details/122688120

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有