android图像处理教程?

android图像处理教程?,android,image,image-processing,Android,Image,Image Processing,有人知道android的图像处理教程吗?我是android新手,我正在编写一个应用程序,在位图上放置一个效果。我可以找到很多java教程,但android不支持awt。我想只使用android sdk操作位图中的像素,例如扭曲、鱼眼等。我可以访问像素并更改它们的颜色,但我不太擅长转换,也不确定从哪里开始 也许你会在这方面取得一些成功。除此之外,据我所知,没有任何东西能帮上忙。您也可以签出JavaCV,它为您提供了绑定到opencv库的Java对象。 这样,您就不需要进行任何c/c++编码,您可以

有人知道android的图像处理教程吗?我是android新手,我正在编写一个应用程序,在位图上放置一个效果。我可以找到很多java教程,但android不支持awt。我想只使用android sdk操作位图中的像素,例如扭曲、鱼眼等。我可以访问像素并更改它们的颜色,但我不太擅长转换,也不确定从哪里开始

也许你会在这方面取得一些成功。除此之外,据我所知,没有任何东西能帮上忙。

您也可以签出JavaCV,它为您提供了绑定到opencv库的Java对象。 这样,您就不需要进行任何c/c++编码,您可以直接在Java中完成所有工作,并从opencv访问函数

回答您的后续问题:

例如,以圆柱形投影为例:查看图像-

(对不起,我不允许发布图片) 这本书摘自舍利斯基的书()。 你在这里的关系最终是

x'=s*tan⁻¹(x/f) 

其中f是相机的焦距,s是圆柱体的半径,可以使用f=s。 现在要将其放入循环中,下面是一些伪代码:

%% xMitte , yMitte are the coordinates for the point in the middle
for yNeu =1: height
   for xNeu =1: width
      dx = xNeu - xMitte ; %% X relativ to origin
      dy = yNeu - yMitte ; %% Y relativ to origin
      theta = atan(dx / f);
      h = dy / sqrt(dx ^2+f^2);
      x = (f * theta) + xMitte ;
      y = (f * h) + yMitte ;
      BildNeu (xNeu ,yNeu) = BildAlt (x, y);
   end
end
BildNeu是新图片,此数组与BildAlt(原始图片)大小相同

内环末端带有BildNeu和BildAlt的管线可能类似于:

/** returns the color value of that pixel **/
CvScalar pixel = cvGet2D(originalImage, i, j);
/** writes the new color value of that pixel **/
cvSet2D(destinationImage, y, x, pixel);
查看此内容(在[基础知识]29之后向下滚动):

有一些很棒的教程,如:

  • 平均去除效应
  • 平滑效果
  • 浮雕效果
  • 雕刻效果
  • 增强色彩强度
  • 圆角图像
  • 动态水印
  • 图像翻转/镜像
  • 像素颜色替换
  • 淡色
  • 跳蚤/噪音效应
  • 黑色过滤器(增加黑暗度)
  • 雪效应
  • 着色过滤器
  • 饱和滤波器
  • 色调过滤器
  • 图像反射效应
  • 在曲线上绘制文本

由于在Android平台上易于使用,OpenCV Android是首选,尽管可能存在一些限制。以下是一些可能有帮助的参考资料:

1.在Android平台上学习图像处理的最佳方法是通过实现。尝试在Android Studio/Eclipse上运行并理解现有的OpenCV4Android示例。可从以下网址获得:

每个示例的描述都可以在OpenCVAndroid示例页面上找到。混合处理、相机控制、图像处理和色块检测处理预处理和图像处理。它们包括:

RGBA和灰色预览

Canny(边缘检测)

寻找特征

色彩效果

直方图

乌贼墨

索贝尔滤波器

变焦

像素化

后消毒

流域改造

标记(斑点检测)

  • 由于您将在Java平台上工作,因此OpenCV Java教程将非常有用

  • 有一些示例项目

  • 4.查看安卓软件库,获取图像处理库


    注意:为了在设备屏幕(ImageView)上显示Mat对象,必须将其转换为位图对象

    好的,谢谢,用javacv做径向变换容易吗?我必须说我从来没有用过javacv。。。只能直接使用opencv(android分支=>)。如果你很容易知道变换矩阵,你就可以进行变换,否则如果你只知道你想要的投影公式,你就可以编写循环并自己将每个像素变换到新的坐标。嗨,谢谢你回来。我发现一个帖子,有人把鱼眼扭曲从C++转录成java。它使用了awt的BuffereImage,所以我只是将该类中的setARGB方法与bitmap类中相应的setPixel方法进行了匹配,结果是:)。我会对你上面提到的循环感兴趣。如果你只知道投影的公式,你会怎么做?如何将每个像素转换为其新坐标?我是否有一个src数组和一个dst数组并应用公式?@turtleboy我在回答中添加了一个例子(因为代码中的格式不可能看起来很好。很抱歉没有翻译变量名,但我只是从我的毕业论文中复制粘贴的(德语)正如我在这里解释的,我在我的代码中使用的投影,感谢这个例子,花时间和它分享。数学不是我的优点,但是我会看一看。我发现了一些代码,它能让某人从C++转录成java。然后我重构了代码,用位图代替缓冲区。但是我需要深入研究。为了我自己的利益,我将其转换为图形。再次感谢。有没有机会将代码与世界其他地方一起转换?@netlander当然有,先生。我现在已经让应用程序效果工作了,并且仅在Android中就这样做了。我重新编写了一个过滤器类,使用位图而不是缓冲图像。有什么用于图像标记的吗?@Sauron:你可以试试这个:这是世界上最难、最复杂的导入库
    /** returns the color value of that pixel **/
    CvScalar pixel = cvGet2D(originalImage, i, j);
    /** writes the new color value of that pixel **/
    cvSet2D(destinationImage, y, x, pixel);