基于OpenCv和swing实现图片/视频的展示
图片的展示
swing展示图片,多为操作BufferedImage,这里要关注的核心是将Mat转为BufferedImage。
代码如下:
publicImage toBufferedImage(Mat matrix) {int type =BufferedImage.TYPE_BYTE_GRAY;if (matrix.channels() > 1) {
type=BufferedImage.TYPE_3BYTE_BGR;
}int bufferSize = matrix.channels() * matrix.cols() *matrix.rows();byte[] buffer = new byte[bufferSize];
matrix.get(0,0,buffer); //get all the pixels
BufferedImage image = newBufferedImage(matrix.cols(),matrix.rows(),type);final byte[] targetPixels =((DataBufferByte)image.getRaster().getDataBuffer()).getData();
System.arraycopy(buffer,0,targetPixels,0,buffer.length);returnimage;
}
comment 1:OpenCV Mat --> BufferedImage AWT , 创建一个byte array用以保存mat 矩阵的像素信息。数组大小为通道数和图片宽/高之积。其中,Mat.get()将所有的元素导入byte数组。最终,图片的光栅信息通过 getDataBuffer()和getDate()组成接收数组,并通过System.arraycopy方法完成填充。实现最终的类型与数据的转移。
comment 2:图片/视频,最终展示的都为BufferedImage,并在JFrame中展示,这里可将toBufferedImage与swing组件配置以展示的部分抽取为类ImageReader。如下:
importorg.opencv.core.Mat;import javax.swing.*;import java.awt.*;importjava.awt.image.BufferedImage;importjava.awt.image.DataBufferByte;/*** @Author: nya
*