您的位置:首页 > 编程语言 > Java开发

Java(opencv)窗体中显示图像

2017-11-03 15:47 351 查看
源代码下载:

Java(opencv)中显示图像

在textImageIO java项目中添加textImageIO包,在包中添加textImage.java

在tool包中添加tool.java



在窗体中添加一个Jlabel,

在textImage.java中添加一下程序:

package textImageIO;

import java.awt.EventQueue;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;

import tool.mat2BufferedImage;
public class textImage {

private JFrame frame;

/**
* Launch the application.
*/
static{System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
textImage window = new textImage();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the application.
*/
public textImage() {
initialize();
}

/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 800, 450);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);

JLabel label = new JLabel("");
label.setBounds(0, 0, 800, 450);
frame.getContentPane().add(label);

Mat source=Imgcodecs.imread("F://Projects_opencv//12.jpg");
BufferedImage image=mat2BufferedImage.matToBufferedImage(source);
label.setIcon(new ImageIcon(image));
}
}

注意:mat2BufferedImage.matToBufferedImage(source);这个方法是将Opencv中Mat格式的图像转换成Java Swing中的BufferedImage格式,因为在Swing中只支持BufferedImage格式图像显示。该方法是我们自己写的,又因为该方法我们以后一直要使用,因此,在testOpencv中新建一个tool包,然后在该包下新建一个mat2BufferedImage.java类,该类代码如下:

package tool;

import java.awt.image.BufferedImage;

import org.opencv.core.Mat;
public class mat2BufferedImage {

public static BufferedImage matToBufferedImage(Mat matrix) {

int cols=matrix.cols();
int rows=matrix.rows();
int elemSize=(int)matrix.elemSize();
byte[] data=new byte[cols*rows*elemSize];
int type;
matrix.get(0 ,0,data);
switch(matrix.channels()){
case 1:
type=BufferedImage.TYPE_BYTE_GRAY;
break;
case 3:
type=BufferedImage.TYPE_3BYTE_BGR;
byte b;
for(int i=0;i<data.length;i=i+3){
b=data[i];
data[i]=data[i+2];
data[i+2]=b;
}
break;
default:
return null;

}
BufferedImage image2=new BufferedImage(cols,rows,type);
image2.getRaster().setDataElements(0, 0,cols,rows,data);
return image2;
}

}


现在运行textImage.java

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: