Android图像处理

Android图像处理
        Android中有以下几种方式来对图像进行处理,大致归纳为以下几种方式:
        1.JAVA层,可以调用Bitmap类提供的一些方法,比如getPixel(x, y)这种方式,结果你会发现,这比龟速还要慢的说。
        2.jni(或者NDK)来调用C执行图像处理算法。这也正是很多公司喜欢用的方法,生成linux可执行的.SO文件。
        3 OpenCV开源图像组件,其实方法来讲,和Open CV的用法毫无差异。适合喜欢快速的人群,不适合瞎捉摸的童鞋。
       首先第一种直接过滤掉,速度极慢,实时性有点坑爹,写应用的可以去弄,感觉不适合笔者这类嵌入式的。NDK提供过一个关于图像处理的demo程序。就是Plasma这个历程吧。大致上讲,图像分成了首先传入,传入一个Jobject对象,然后对对象进行一个分析,NDK层提供了一个图像的解析工具, AndroidBitmapInfo 他主要解析了bitmap类图像的一些基本信息,包括了图像大小,编码格式等等。然后再调用本地工具AndroidBitmap_lockPixels(env, bitmapgray, &pixelsgray)将图像的像素与指针进行关联,同时锁住图像数据。最后,对对应的数据进行处理即可。
如下:
//定义一个结构体
typedef struct {
	uint8_t red;
	uint8_t green;
	uint8_t blue;
	uint8_t alpha;
} argb;

//解析图像数据
	for (y = 0; y < infocolor.height; y++) {
		argb * line = (argb *) pixelscolor;
		uint8_t * grayline = (uint8_t *) pixelsgray;
		for (x = 0; x < infocolor.width; x++) {
			grayline[x] = 255
					- ((30 * line[x].red + 59 * line[x].green
							+ 11 * line[x].blue) / 100);
		}

		pixelscolor = (char *) pixelscolor + infocolor.stride;
		pixelsgray = (char *) pixelsgray + infogray.stride;

	}

       这段代码是对图像RGB三通道的转换,变成灰度图像的其中一段,在处理后,要解开对Bitmap的锁定,就可以实现对图像的处理了。

AndroidBitmap_unlockPixels(env, bitmapcolor);
	AndroidBitmap_unlockPixels(env, bitmapgray);

        另一种是图像的开源库,Open CV个人比较喜欢2.3这个版本,不用安装APK,感觉用着方便,直接导入库就可以用了,而且功能强大,可以轻松实现对线园等识别,还有很多图像增强的效果,方便实用。所以说是属于快速开发类型的,但是值得注意,有些函数的调用方式不太一样,不要一味去拿C语言来玩,这毕竟是JAVA的东西。
        值得注意的一点是,Open CV有两种调用方式,一种是JAVA层调用,一种是native层调用.都蛮简单地,不是很难。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值