2016-03-30 157 views
0

我想使用网络摄像头从一张纸上读取QR码,但它一直不合格 - 它不会打印。我一直坚持这个问题好几天了。从网络摄像头读取QR码

这里是我的代码:

公共无效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(); 
} 

这段代码看上去很奇怪的,你的人?任何帮助表示赞赏,谢谢:)

+0

这取决于图像质量。您可以尝试在解码方法中添加指令'try harder':Map hints = new TreeMap <>(); \t \t hints.put(DecodeHintType.TRY_HARDER,null);结果结果= qrReader.decode(位图,提示);' – LibertyPaul

+0

它仍然不起作用..但是,谢谢你的回答:) – Jacob

+0

你能提供你想要解码的图像的例子吗? – LibertyPaul

回答

0

我发现的方法,我用我的框架(垫目标)到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; 
}