Articles of image processing

androidimage processing教程?

有谁知道Android的任何好的image processing教程? 我是android的新手,我正在编写一个对位图产生影响的应用程序。 我可以在java中find很多教程,但android不支持awt。 我想使用android sdk操作位图中的像素,例如变形,鱼眼等。我可以访问像素并改变它们的颜色,但我对转换不太好,并且不确定从哪里开始。

在Android中显示YUV图像

在我的应用程序中,我们需要显示从服务器接收的video帧到我们的android应用程序, 服务器以每秒50帧的速度发送video数据,在WebM中进行编码,即使用libvpx对图像进行编码和解码, 现在从libvpx解码后得到YUV数据,我们可以在图像布局上显示, 目前的实现是这样的, 在JNI / Native C ++代码中,我们将YUV数据转换为RGB数据在Android框架中调用 public Bitmap createImgae(byte[] bits, int width, int height, int scan) { Bitmap bitmap=null; System.out.println(“video: creating bitmap”); //try{ bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(bits)); //}catch(OutOfMemoryError ex){ //} System.out.println(“video: bitmap created”); return bitmap; } 要创建位图图像, 使用以下代码在imageView上显示图像, img = createImgae(imgRaw, imgInfo[0], imgInfo[1], 1); if(img!=null && !img.isRecycled()){ iv.setImageBitmap(img); //img.recycle(); img=null; […]

setPixels出错

我正在尝试编辑图像。 但我收到setPixels错误。 picw = pic.getWidth(); pich = pic.getHeight(); picsize = picw*pich; int[] pix = new int [picsize]; pic.getPixels(pix, 0, picw, 0, 0, picw, pich); pic.setPixels(pix,0,pic.getWidth(),0,0,pic.getWidth(),pic.getHeight()); 但我使用setPixels获得非法状态exception Caused by: java.lang.IllegalStateException at android.graphics.Bitmap.setPixels(Bitmap.java:878) at com.sandyapps.testapp.testapp.onCreate(testapp.java:66)

将位图数组转换为YUV(YCbCr NV21)

如何将BitmapFactory.decodeFile()返回的Bitmap转换为YUV格式(simillar到相机的onPreviewFrame()返回字节数组)?

适用于Android的image processing库?

一位在医学界工作的朋友让我试着写一个Android的小应用程序,它可以拍照,分析它的颜色和大小,这样我们就知道自上次快照以来它是如何演变的,并根据它做出推荐演化。 我只是开始使用Android,并且想知道是否有人知道一个好的库可以做到这一点并节省开发时间。

实时处理Android相机帧

我正在尝试创建一个能够实时处理相机帧的Android应用程序。 首先,我只想显示相机所看到的灰度版本。 我已经设法从onPreviewFrame方法中的字节数组中提取适当的值。 以下只是我的代码片段: byte[] pic; int pic_size; Bitmap picframe; public void onPreviewFrame(byte[] frame, Camera c) { pic_size = mCamera.getParameters().getPreviewSize().height * mCamera.getParameters().getPreviewSize().width; pic = new byte[pic_size]; for(int i = 0; i < pic_size; i++) { pic[i] = frame[i]; } picframe = BitmapFactory.decodeByteArray(pic, 0, pic_size); } byte[]帧数组的第一个[width*height]值是亮度(灰度)值。 一旦我提取了它们,我如何将它们作为图像显示在屏幕上? 它也不是2D数组,所以如何指定宽度和高度?

使用OpenCV在Java中进行反投影

我想使用反投影检测OpenCV图像中的特征。 首先,我非常乐意计算单个彩色小图像的直方图,然后将其应用于更大的图像。 然后我可以在此基础上进一步构建。 在C ++中有一个例子,我想在Java中做这样的事情。 遗憾的是,OpenCV的Java接口没有很好的文档记录。 下面是我到目前为止的代码,但它不起作用(显然,我不会寻求帮助)。 如果有人可以帮助我使用它或find一些 Java API的好文档 ,那将是非常好的 ! import java.util.ArrayList; import org.opencv.core.*; import org.opencv.imgproc.Imgproc; public class ColorHistogramDetector extends ColorThresholdDetector { //private cvHistogram histogram; //histogram resolution for hue and saturation static final int hbins = 30;//, sbins = 32; public synchronized Mat detect(Mat inputFrame) { Mat calcFrame = new Mat(); Imgproc.cvtColor(inputFrame, calcFrame, […]

更改Android应用程序中对象的颜色

基本上我的目标是实时改变涂料应用的颜色。 为了实现这一目标,我遵循以下概念: 我使用canny()方法来查找对象。 使用findContours()进行边缘检测。 使用drawContours()为对象着色。 如果有任何其他概念需要达到目标,请向我建议。 我试过但没有准确的轮廓边缘。 原始输入: 预期产量: 当前输出: 我得到灰度图像,但我想在rgb模式。 这是我的代码: package com.example.imageprocess; import java.util.ArrayList; import java.util.List; import org.opencv.android.BaseLoaderCallback; import org.opencv.android.CameraBridgeViewBase; import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame; import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2; import org.opencv.android.LoaderCallbackInterface; import org.opencv.android.OpenCVLoader; import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.core.MatOfPoint; import org.opencv.core.Point; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.imgproc.Imgproc; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.WindowManager; public class MainActivity […]

使用Android相机进行image processing

我想要使​​用onPreviewFrame在显示给用户之前(即应用颜色色调,棕褐色等)后处理图像。 据我所知,返回到callback的byte []数据在YUV420sp中编码。 有人一直在Java解码这个到RGB或使用NDK(本机代码)? 有没有人有一个函数的例子,将其解码为RGB以及之后如何使用RGB值? 谢谢。

计算透视变换目标图像的宽高比

我最近在OpenCV中实现了透视转换到我的Android应用程序。 几乎所有的工作都没有问题,但一方面需要做更多的工作。 问题是我不知道如何计算透视变换的目标图像的正确高宽比(不需要手动设置),以便它可以计算图像的高宽比与真实的大小东西/图像, 尽pipe相机的angular度 。 请注意,起始坐标不形成梯形,它确实形成一个四边形。 如果我有一张从大约45度拍摄的书的照片,我希望目标图像的纵横比与本书的纵横比几乎相同。 有2D照片很难,但CamScanner应用程序完美。 我已经做了非常简单的方法来计算我的目标图像的大小(没有期望它的工作,因为我想),但它使图像从45度angular约20%,当降低angular度的图像高度减less很显然,虽然CamScanner可以完美的完成angular度, 在这里,CamScanner保持目标图像(第二个)的纵横比与书本相同,即使在20度的angular度下,它也相当准确。 同时,我的代码看起来像这样(虽然计数目标图像的大小,我没有打算它的工作,因为我问这个问题): public static Mat PerspectiveTransform(Point[] cropCoordinates, float ratioW, float ratioH, Bitmap croppedImage) { if (cropCoordinates.length != 4) return null; double width1, width2, height1, height2, avgw, avgh; Mat src = new Mat(); List<Point> startCoords = new ArrayList<>(); List<Point> resultCoords = new ArrayList<>(); Utils.bitmapToMat(croppedImage, src); for (int […]