I am using OpenCV (2.4.8) and Zxing (2.3.0) for Android and I'd like implement „hidden“ QR code scanning (without use Zxing CaptureActivity on screen) in Mat converted to bitmap and then display decoded result in console.

So, I call Zxing() methot in onCameraFrame method:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {

    // there will be preprocessing
    mRgba = inputFrame.rgba();

    try {
        zxing();
    } catch (ChecksumException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (FormatException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
    return mRgba;
}

And it is my zxing() method (inspired by ZXing convert Bitmap to BinaryBitmap):

public void zxing() throws ChecksumException, FormatException{

    Bitmap bMap = Bitmap.createBitmap(mRgba.width(), mRgba.height(), Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(mRgba, bMap);
    int[] intArray = new int[bMap.getWidth()*bMap.getHeight()];  
    //copy pixel data from the Bitmap into the 'intArray' array  
    bMap.getPixels(intArray, 0, bMap.getWidth(), 0, 0, bMap.getWidth(), bMap.getHeight());  

    LuminanceSource source = new RGBLuminanceSource(bMap.getWidth(), bMap.getHeight(),intArray);

    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    Reader reader = new QRCodeMultiReader();     

    String sResult = "";

   try {

        Result result = reader.decode(bitmap);   
        sResult = result.getText();
        Log.d(TAG, sResult);

        }
    catch (NotFoundException e) {
            Log.d(TAG, "Code Not Found");
            e.printStackTrace();
    }

    }

With this code, I receive "Code Not Found" messages (about five per second) in LogCat console when camera don’t capture QR code, but when try scan QR code, I don’t see any message ( I thought I will receive sResult). What I have wrong?

Android manifest:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
    <activity
        android:name="mk.app_02_28.MainActivity"
        android:label="@string/app_name" 
        android:screenOrientation="landscape" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
有帮助吗?

解决方案

It was stupid mistake, I had wrong line

Log.d(TAG, sResult);

It should be:

Log.d(TAG,"Found something: "+result.getText());
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top