我正在使用 Google 的 Mobile Vision API 来识别静态位图中的文本(数字)。现在我想放大到找到号码的地方。
所以这就是我扫描位图并获得我的 x 和 y 坐标的方式
点[] p = textBlock.getCornerPoints();
public void Test(Bitmap bitmap) {
Context context = getApplicationContext();
TextRecognizer ocrFrame = new TextRecognizer.Builder(context).build();
Frame frame = new Frame.Builder().setBitmap(bitmap).build();
ByteBuffer byteBuffer = frame.getGrayscaleImageData();
if (ocrFrame.isOperational()) {
Log.e(TAG, "Textrecognizer is operational");
}
SparseArray<TextBlock> textBlocks = ocrFrame.detect(frame);
for (int i = 0; i < textBlocks.size(); i++) {
TextBlock textBlock = textBlocks.get(textBlocks.keyAt(i));
String value = textBlock.getValue();
Point[] p = textBlock.getCornerPoints();
Log.e(TAG, "something is happening");
}
}
此外,我正在使用 TouchImageView 来显示位图。现在我用我获得的坐标调用 setZoom 方法,如下所示:
touchImageView.setZoom(1F, 210F, 748F, ImageView.ScaleType.CENTER);
但它放大到错误的地方,我真的不知道为什么。有人可以给我一些提示吗?
(https://github.com/MikeOrtiz/TouchImageView/blob/master/src/com/ortiz/touch/TouchImageView.java)
编辑:好的,我发现比例类型做了我不明白的事情。我认为这里的问题是setZoom。我必须将位图的坐标转换为 Touchimageview 的坐标。
EDIT2:解决方案:错误是直接传递 x 和 y 坐标,但 setZoom 取值在 0 和 1 之间
int BitmapHeight = photo.getHeight();
int BitmapWidth = photo.getWidth();
int FoundX = p[0].x;
int FoundY = p[0].y;
float DividerX = BitmapWidth / (float)FoundX;
float DividerY = BitmapHeight / (float)FoundY;
float ZoomX = 1 / (float)DividerX;
float ZoomY = 1 / (float)DividerY;
touchImageView.setZoom(touchImageView.getMaxZoom(), ZoomX, ZoomY, ImageView.ScaleType.CENTER);