我正在用Java的OpenCV编写我的第一个程序,我想问,是否可以仅使用Mat从文件加载和显示图像?我在这个网站上找到了解决方案http://answers.opencv.org/question/31505/how-load-and-display-images-with-java-using-opencv/但它之前将"Mat"更改为"Image"。我将感谢任何提示
这是一个老问题,但对于那些仍然面临同样问题的人来说,现在在OpenCV for Java(我使用的是verion 4.1.1)中的HighGui静态对象下实现了"imshow"。
因此,您应该首先导入它,如下所示:
import org.opencv.highgui.HighGui;
然后显示图像,如:
HighGui.imshow("Image", frame);
HighGui.waitKey();
其中"frame"是OpenCV垫子对象。
您可以使用下一个代码将cvMat元素转换为java元素:BufferedImage或Image:
public BufferedImage Mat2BufferedImage(Mat m) {
// Fastest code
// output can be assigned either to a BufferedImage or to an Image
int type = BufferedImage.TYPE_BYTE_GRAY;
if ( m.channels() > 1 ) {
type = BufferedImage.TYPE_3BYTE_BGR;
}
int bufferSize = m.channels()*m.cols()*m.rows();
byte [] b = new byte[bufferSize];
m.get(0,0,b); // get all the pixels
BufferedImage image = new BufferedImage(m.cols(),m.rows(), type);
final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
System.arraycopy(b, 0, targetPixels, 0, b.length);
return image;
}
然后用显示
public void displayImage(Image img2) {
//BufferedImage img=ImageIO.read(new File("/HelloOpenCV/lena.png"));
ImageIcon icon=new ImageIcon(img2);
JFrame frame=new JFrame();
frame.setLayout(new FlowLayout());
frame.setSize(img2.getWidth(null)+50, img2.getHeight(null)+50);
JLabel lbl=new JLabel();
lbl.setIcon(icon);
frame.add(lbl);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
来源:http://answers.opencv.org/question/10344/opencv-java-load-image-to-gui/
不,在java中没有等价的imshow
。请参阅此链接。