我正在开发一个类似于Word Lens的iOS应用程序。我想要的是在某些文本部分添加一些模糊碎片作为叠加的功能,如附图所示。 如果可以从图像中完全消除文本数据,我也会很感激。 我在互联网上搜索了很多,发现它与OpenGL ES和OpenCV有关,但并不完全是如何实现这一点。
任何指导都将受到高度赞赏!
由于
请看这里的图像,在AVCaptureSession焦点下的图像上有模糊的矩形
答案 0 :(得分:1)
有一个名为VUFORIA/QCAR的sdk。如果你检查他们的Text Recognition Sample,它会给你一个想法。
例如;
首先更改open gl es着色器程序以渲染正方形
之后你需要检测这个词后面的颜色。这样做。 vuforia提供对图像数据的只读访问权限。
像这样;QCAR::Frame vbFrame = state.getFrame();
const QCAR::Image *vbImage;
for (int i = 0; i<vbFrame.getNumImages(); i++) {
if (state.getFrame().getImage(i)->getFormat() == QCAR::RGB888) {
vbImage = state.getFrame().getImage(i);
}
}
从那时起,您需要vuforia
经验和二元图像知识。
为了给你一个想法,你可以获得这样的RGB
点颜色值,
- (void) getColorFromVGImage:(int)xx andY:(int)yy
{
const char* vbImageData = (const char*) vbImage->getPixels();
int maxXx = vbImage->getWidth() - 1;
int maxYy = vbImage->getHeight() - 1;
int bytesPerPixel = 3;
int bytesPerRow = vbImage->getStride();
int byteIndex = ((bytesPerRow * yy) + (xx * bytesPerPixel));
int maxByteIndex = (bytesPerRow * maxYy) + (maxXx * bytesPerPixel);
if (maxByteIndex >= byteIndex && byteIndex > 0) {
unsigned char rchar = vbImageData[byteIndex];
unsigned char gchar = vbImageData[byteIndex + 1];
unsigned char bchar = vbImageData[byteIndex + 2];
int r = (int)rchar;
int g = (int)gchar;
int b = (int)bchar;
}
}
希望这会有所帮助。请注意: RGB888二进制图像数据的此过程。
答案 1 :(得分:0)
是的,这是可能的,是的,OpenCV和OpenGL将是一个很好的技术。
OpenCV是一个跨平台的硬件加速图像识别库。您可以使用它来开发可在视频源中查找文本并在其周围放置框的例程。您对所查看内容的背景越多,您就可以越快,越可靠。 (例如,如果您知道您将扫描具有固定布局的纸质表格和用于提供用户信息的方框,则比扫描某些可能包含不同字体/不同尺寸的文本且布局可能不同的任意图像要容易得多。)
然而,这两个都是非常先进的框架,需要数周或数月才能熟练掌握,即使对于有经验的开发人员也是如此。
如果你是新手,那么你就是他的头脑。