在Jpanel上描绘OpenCV图像的问题

时间:2016-12-27 17:44:05

标签: java swing opencv

我试图显示从openCV库提供的VideoCapture对象中捕获的图像。我制作了一个小型GUI,它有一个jpanel组件,我想在其上描绘图像。图像被捕获为Mat对象,必须将其转换为BufferedImages才能在GUI上显示。

我在之前的工作项目中完成了这项工作。然后,我只是从那里复制了大部分代码。问题是在当前项目中绘制的图像是一团糟。我没有好的方法来解释它的样子,所以我将在这里张贴一个印刷的屏幕:

broken image

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;
}

提前感谢您的回复。

0 个答案:

没有答案