android-笔记-OpenCV 实例 - 检测胶体金卡-读二维码
·
// ZXing二维码库(推荐) implementation 'com.journeyapps:zxing-android-embedded:3.4.0'
实例1-从图片中读取二维码集合(我的实例)
按键事件-调用
public void a3_bt_test_QRCode(){
List<String> listcodes = new ArrayList<>();
List<String> listcodesMax = new ArrayList<>();
bitmap = mSurfaceView.readPicture(img_big0); //获取图片
myOpenCV.showImage(bitmap,img_big0); //图片显示(作直观参照)
Log.e(TAG, "-------------------------旋转图片,多次识别二维码");
for(int i = 0; i <= 10; i++){
int angle = i * 30;
Matrix matrix = new Matrix();
matrix.postRotate(angle);
Bitmap b = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
listcodes = myOpenCV.readQRCoders(b); //识别二维码
if(listcodesMax.size() < listcodes.size())listcodesMax = listcodes; //把获取最多二维码 收藏记录
if(listcodes.size() >= 3)break; //获取我们要求的3个二维码时,跳出
}
Log.e(TAG, "辨别二维码 个数= "+ listcodesMax.size());
for (int i = 0;i<listcodesMax.size();i++){
Log.e(TAG, "二维码 : "+ i + " "+listcodesMax.get(i) );
}
}
public List<String> readQRCoders(Bitmap bitmap){
//二维码识别
List<String> listcodes=new ArrayList<>();
String msg ="";
// 将Bitmap转换为ZXing可识别的格式
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
// 使用QRCodeMultiReader可以识别多个二维码
try{
QRCodeMultiReader reader = new QRCodeMultiReader();
Result[] results = reader.decodeMultiple(binaryBitmap);
if (results != null && results.length > 0) {
for (int i = 0; i < results.length; i++) {
listcodes.add(results[i].getText());
Log.e(TAG, "二维码 = "+ results[i].getText());
}
} else {msg = "未识别到二维码";}
} catch (NotFoundException e) {msg = "异常错误1-未找到二维码 " + e;
} catch (Exception e) {msg = "异常错误2-识别失败 " + e;}
Log.e(TAG, "readQRCoder: "+ msg);
return listcodes;
}
实例2-从图片中读取单个二维码(我的实例)
//===============================================================二维码识别
public List<String> readQRCoderFormSingleCard(Bitmap bitmapSrc){
String msg = "";
List<String> list = new ArrayList<>();
for(int i = 0; i <= 10; i++){
int angle = i * 30; //图片旋转
Matrix matrix = new Matrix();
matrix.postRotate(angle);
Bitmap bp = Bitmap.createBitmap(bitmapSrc, 0, 0, bitmapSrc.getWidth(), bitmapSrc.getHeight(), matrix, true);
//二维码识别 将Bitmap转换为ZXing可识别的格式
int width = bp.getWidth();
int height = bp.getHeight();
int[] pixels = new int[width * height];
bp.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
// 使用QRCodeMultiReader可以识别多个二维码
try{
QRCodeMultiReader reader = new QRCodeMultiReader();
Result[] results = reader.decodeMultiple(binaryBitmap);
if (results != null && results.length > 0) {
for (int k = 0; k < results.length; k++) {
list.add(results[k].getText());
//Log.e(TAG, "二维码 k = "+ k +" "+ results[k].getText());
}
}else{msg = "err-未识别到二维码";}
} catch (NotFoundException e) {msg = "err-异常错误1-未找到二维码 " + e;
} catch (Exception e) {msg = "err-异常错误2-识别失败 " + e;}
if(list.size() > 0)break;// Log.e(TAG, ""+ msg);
}
return list;
}
持续更新
更多推荐
所有评论(0)