从网络摄像头中读取QR码

时间:2016-03-30 09:49:22

标签: java qr-code

我正在尝试使用网络摄像头从一张纸上读取QR码,但它仍然失败 - 它不会打印。我已经坚持了几天这个问题了。

这是我的代码:

public void imageUpdated(图片图片)     {

    LuminanceSource ls = new BufferedImageLuminanceSource((BufferedImage)image);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(ls));
    QRCodeReader qrReader = new QRCodeReader(); 
    try {
        Result result = qrReader.decode(bitmap);
        System.out.println("QR Code data is: "+result.getText());
    } catch (NotFoundException e) {
        // TODO Auto-generated catch block
        System.out.println("--------");
    } catch (ChecksumException e) {
        // TODO Auto-generated catch block
        System.out.println("--------");
    } catch (FormatException e) {
        // TODO Auto-generated catch block
        System.out.println("--------");
    }
    qrReader.reset();
}

这个代码对你们任何人来说都很奇怪吗?任何帮助表示赞赏,谢谢:)

1 个答案:

答案 0 :(得分:0)

我发现我用来将我的框架(Mat对象)转换为bufferedImage的方法不起作用。照片全黑了。在StackOverflow上找到这个代码对我有用:

public Image toBufferedImage(Mat m){
    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;
}
相关问题