我试图显示从openCV库提供的VideoCapture对象中捕获的图像。我制作了一个小型GUI,它有一个jpanel组件,我想在其上描绘图像。图像被捕获为Mat对象,必须将其转换为BufferedImages才能在GUI上显示。
我在之前的工作项目中完成了这项工作。然后,我只是从那里复制了大部分代码。问题是在当前项目中绘制的图像是一团糟。我没有好的方法来解释它的样子,所以我将在这里张贴一个印刷的屏幕:
RemoteCam是jpanel的变量名称。 setRemoteCamImage是从一个从videoCapture对象读取的外部线程调用的。
代码:
public void setRemoteCamImage(Mat aMat){
BufferedImage aImg = matToImg(aMat);
if (!(aImg == null)) {
Graphics g = RemoteCam.getGraphics();
g.drawImage(aImg, 0, 0, RemoteCam.getWidth(), RemoteCam.getHeight(), 0, 0, aImg.getWidth(), aImg.getHeight(), null);
}
}
public static BufferedImage matToImg(Mat in) {
BufferedImage out;
byte[] data = new byte[in.height() * in.width() * (int) in.elemSize()];
int type;
in.get(0, 0, data);
if (in.channels() == 0) {
type = BufferedImage.TYPE_BYTE_GRAY;
} else {
type = BufferedImage.TYPE_3BYTE_BGR;
// Arange the colors from BGR to RGB
byte b;
for(int i = 0; i < data.length; i = i + 3){
b = data[i];
data[i] = data[i + 2];
data[i + 2] = b;
}
}
out = new BufferedImage(in.height(), in.width(), type);
out.getRaster().setDataElements(0, 0, in.height(), in.width(), data);
return out;
}
提前感谢您的回复。