OpenCV相机图像显示偏蓝

时间:2016-04-26 20:24:55

标签: java android opencv

我正在使用以下代码从相机中获取图像,但相机图像显示的颜色不同。

public Mat mat = new Mat();
private BufferedImage img;
private byte[] dat;

    public void getSpace(Mat mat) {
            this.mat = mat;
            int w = mat.cols(), h = mat.rows();
            if (dat == null || dat.length != w * h * 3)
                dat = new byte[w * h * 3];
            if (img == null || img.getWidth() != w || img.getHeight() != h || img.getType() != BufferedImage.TYPE_3BYTE_BGR)
                img = new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR);
        }

        public BufferedImage getImage(Mat mat) {
            getSpace(mat);
            mat.get(0, 0, dat);
            img.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), dat);
            return img;
        }

enter image description here

1 个答案:

答案 0 :(得分:1)

也许您的图片是RGB类型而不是BRG?在这种情况下,你会交换红色和蓝色。尝试将TYPE_3BYTE_BGR更改为TYPE_3BYTE_RGB

[编辑]抱歉,我只是在OpenCV的Python方面。发生的事情是你意外地切换了通道B和R(图像矩阵的第1层和第3层),你需要将其切换回来。如有必要,在矩阵中交换它。

该链接可能有所帮助:Converting BufferedImage to Mat in opencv

[EDIT2]看看下面的Micka的评论