Articles of image processing

Android颜色飞溅

有人可以建议我快速的方法或图像的颜色飞溅效果? 例如,我选择一种颜色,并且除了我选择的颜色之外,所有颜色的照片都会去饱和。 我尝试使用逐像素颜色检查然后替换颜色,但对于大图像来说太慢了。 int width = originalImage.getWidth(); int height = originalImage.getHeight(); int[] pixels = new int[width * height]; originalImage.getPixels(pixels, 0, width, 0, 0, width, height); for (int x = 0; x < pixels.length; ++x) { pixels[x] = Distance(pixels[x], fromColor) < 4 ? targetColor : pixels[x]; } Bitmap newImage = Bitmap.createBitmap(width, height, originalImage.getConfig()); newImage.setPixels(pixels, 0, width, […]

在Renderscript Compute中将数组传递给rsForEach

我发现在RenderScript中缺少良好的文档,据我所知, forEach在RS中是为分配中的每个项目执行root()。 我正在尝试为Renderscript创建一个image processing库,作为一个起点,我达到了这个很好的答案 。 但问题在于,模糊操作在每个像素上,并且每个像素需要另一个循环(n具有模糊宽度)的计算。 尽管在多核上运行,但它仍然有点太慢。 我试图修改它以允许(两次通过)盒式filter,但这需要处理单个行或列而不是单元格。 那么,有没有办法让foreach将数组发送到root()?

如何使用LightingColorFilter使图像从暗到亮

我想添加图像的光,我想使用LightingColorFilter LightingColorFilter lcf = new LightingColorFilter( mul, add); imageView.setColorFilter(lcf); 但我不知道如何调整mul, add ,你能给出一些链接或代码或参数来调整图像的光线吗? 谢谢

如何在位图上应用不同的图像效果(滤镜),如棕褐色,黑白,模糊等?

我不知道如何对图像应用不同的效果, 我在效果类中看到了EffectFactory类和Effect类有一个方法适用但我不知道在inputTexId和optputTexId中传递什么,并且我从哪里得到新的更新图像,如何在imageView中存储更新的图像, 请帮我解决这个问题。 是否有任何开源库可用于为Image提供效果。 谢谢,

如何处理GPU的内存限制,以便在GPU上进行高分辨率image processing?

我正在制作相机应用程序,这个应用程序将为用户提供一些filter。 目前我的代码是在NDK上,它工作正常,但我想让它更快一点。 似乎GPU和opengl Es 2.0是要走的路。 我唯一担心的是GPU的内存限制。 由于现代相机需要5-10 mp的图像,而GPU内存限制远远低于此。 我想知道是否有办法解决这个限制。 在我看来,唯一合乎逻辑的选择是将图像分成较小的部分,然后在GPU上处理它们,最后将它们分配给最终图像。 我的问题是,如果这种方法仍然有利于性能,还有任何其他选项可以在移动GPU上处理高分辨率图像。 编辑:我需要澄清我想使用GPU进行image processing,所以我的目标不是将结果渲染到屏幕上。 我将它渲染到另一个纹理并将其保存到磁盘。

Android:BitmapFactory.decodeByteArray给出像素化位图

我正在开发一款Android应用,可以显示从Flickr下载的照片。 我从字节数组中获取一个位图对象,然后从相关的Flickr URL中读取,如下所示: BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inDither = true; opt.inPreferredConfig = Bitmap.Config.ARGB_8888; Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, opt); 然后我将位图绘制到View对象的onDraw方法的canvas上: Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); canvas.drawBitmap(bitmap, 0, 0, paint); 问题是得到的图像是像素化的,我无法弄清楚为什么; 我已经尝试了一些opt和paint对象的变种而没有运气。 我的应用程序中显示的图片与原始URL中的图片之间的差异大致如下所示: 图片不好,请参阅左上角的像素化http://homepages.inf.ed.ac.uk/s0677975/bad.jpg 好照片,这是预期的结果http://homepages.inf.ed.ac.uk/s0677975/good.jpg 看看例如在左上角的云层中看到差异。 请注意,从项目资源加载并以类似方式绘制的JPEG图片显示正常,即没有像素化。 谁能给我一个暗示为什么会这样? 为了详细说明,字节数组是从Flickr获得的,如下所示; 这是基于Romain Guy的Photostream应用程序的代码: InputStream in = new BufferedInputStream(url.openStream(), IO_BUFFER_SIZE); final ByteArrayOutputStream dataStream = new […]

如何更改位图android中某些像素的颜色

我有一个位图,我想改变某些像素。 我已经将位图中的数据转换为数组,但是如何在该数组中设置像素颜色? 谢谢 int[] pixels = new int[myBitmap.getHeight()*myBitmap.getWidth()]; myBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight()); for(int i =0; i<500;i++){ //Log.e(TAG, "pixel"+i +pixels[i]);

相机像素旋转

我想对从相机获得的像素进行一些image processing。 问题是来自摄像机的像素旋转了90度。 我得到方法onPreviewFrame(byte[] data, Camera camera)内的像素 我试过camera.setDisplayOrientation(90); 它以正确的方向显示video,但我仍然收到文档中所述的旋转像素: 这不会影响在Android.Hardware.Camera.IPreviewCallback.OnPreviewFrame(Byte [],Android.Hardware.Camera),JPEG图片或录制video中传递的字节数组的顺序。 我也尝试过: parameters.setRotation(90); camera.setParameters(parameters); 但那没用。 我正在使用android 2.2 顶部图像显示使用camera.setDisplayOrientation(90);时的SurfaceView camera.setDisplayOrientation(90); 第二个图像来自dataarrays的onPreviewFrame(byte[] data, Camera camera) 。 如您所见, data数组旋转。

数字识别的建议

我正在编写一个Android应用程序来从图片中提取数独谜题。 对于9×9 Sudoku网格中的每个单元格,我需要确定它是否包含数字1到9之一或是空白。 我从像这样的Sudoku开始: 我使用OpenCV预处理数独,以提取各个数字的黑白图像,然后通过Tesseract将它们放入。 但Tesseract有一些限制: Tesseract很大,包含许多我不需要的function(即全文识别),并且需要英语培训数据才能运行,我认为必须将其放到设备的SD卡上。 至少我可以告诉它只使用tesseract.setVariable(“tessedit_char_whitelist”, “123456789”);查找数字tesseract.setVariable(“tessedit_char_whitelist”, “123456789”); Tesseract经常将单个数字误解为一串数字,通常包含换行符。 它有时也只是简单地弄错了。 以下是上述数独的几个例子: 我有三个问题: 有什么方法可以克服Tesseract的局限性吗? 如果没有,那么检测在Android上实现的个别数字(不是k-最近邻居)的有用, 准确的方法是什么 – 这可以是免费的库或DIY解决方案。 如何改进预处理以定位该方法? 我考虑过的一种可能性是使用细化算法,正如本文所建议的那样,但我不打算去实现它,除非它会有所作为。

使用opencv在android中裁剪图像

我在android中使用OpenCV 2.3.1。 我需要将图像裁剪成一半。 我在做什么 Mat mIntermediateMat2 = new Mat(frame_height,frame_width,rgba.type); mIntermediateMat2 = rgba.clone(); mIntermediateMat2 = mIntermediateMat2.rowRange(0,frame_height/2); 第三步是完成工作还是我必须添加更多内容? 我在opencv 2.3文档中看到了Mat :: operator(),但遗憾的是无法在opencv android包中find它。