求一个eclipse android的图像处理之滤波的程序。急!急!急!要完整

求一个eclipse android的图像处理之滤波的程序。急!急!急!要完整,第1张

调用例子

resultBitmap = (Bitmap) intent.getParcelableExtra("resultBitmap")

// 图片与处理

BitmapFilter bitmapFilter = new BitmapFilter(resultBitmap)

bitmapFilter.changeGrey()

resultBitmap = bitmapFilter.getBitmap()

以下是BitmapFilter

package com.example.androcr

import android.graphics.Bitmap

import android.graphics.Color

/**

* 图像预处理腔嫌类

* @author Administrator

*/

public class BitmapFilter {

private Bitmap bitmap

private int iw

private int ih

private int[] pixels

public BitmapFilter(Bitmap bitmap) {

this.bitmap = bitmap

this.iw = bitmap.getWidth()

this.ih = bitmap.getHeight()

pixels = new int[iw * ih]

// 将bitmap转化为pixel数组

bitmap.getPixels(pixels, 0, iw, 0, 0, iw, ih)

}

public Bitmap getBitmap() {

//漏局 将pixel数组转化为bitmap

bitmap = Bitmap.createBitmap(pixels, iw, ih, Bitmap.Config.ARGB_8888)

return bitmap

}

/**

* 图像的二值化

*/

public void changeGrey() {

// 选取的阈值

int grey = 120

int pixel

int alpha, red, green, blue

for (int i = 0i <返圆让 iw * ihi++) {

pixel = pixels[i]

alpha = Color.alpha(pixel)

red = Color.red(pixel)

green = Color.green(pixel)

blue = Color.blue(pixel)

red = (red >grey) ? 255 : 0

green = (green >grey) ? 255 : 0

blue = (blue >grey) ? 255 : 0

pixels[i] = alpha <<24 | red <<16 | green <<8 | blue

}

}

/**

* 图像的锐化

*/

public void sharp() {

// 像素中间变量

int tempPixels[] = new int[iw * ih]

for (int i = 0i <iw * ihi++) {

tempPixels[i] = pixels[i]

}

int alpha

int red6, red5, red8, sharpRed

int green5, green6, green8, sharpGreen

int blue5, blue6, blue8, sharpBlue

for (int i = 1i <ih - 1i++) {

for (int j = 1j <iw - 1j++) {

alpha = Color.alpha(pixels[i * iw + j])

// 对图像进行尖锐化

// 锐化red

red6 = Color.red(pixels[i * iw + j + 1])

red5 = Color.red(pixels[i * iw + j])

red8 = Color.red(pixels[(i + 1) * iw + j])

sharpRed = Math.abs(red6 - red5) + Math.abs(red8 - red5)

// 锐化green

green5 = Color.green(pixels[i * iw + j])

green6 = Color.green(pixels[i * iw + j + 1])

green8 = Color.green(pixels[(i + 1) * iw + j])

sharpGreen = Math.abs(green6 - green5)

+ Math.abs(green8 - green5)

// 锐化blue

blue5 = Color.blue(pixels[i * iw + j])

blue6 = Color.blue(pixels[i * iw + j + 1])

blue8 = Color.blue(pixels[(i + 1) * iw + j])

sharpBlue = Math.abs(blue6 - blue5)

+ Math.abs(blue8 - blue5)

// 处理颜色溢出

if (sharpRed >255)

sharpRed = 255

if (sharpGreen >255)

sharpGreen = 255

if (sharpBlue >255)

sharpBlue = 255

tempPixels[i * iw + j] = alpha <<24 | sharpRed <<16

| sharpGreen <<8 | sharpBlue

}

}

pixels = tempPixels

}

/**

* 中值滤波

*/

public void median() {

// 对图像进行中值滤波

int alpha, red, green, blue

int red4, red5, red6

int green4, green5, green6

int blue4, blue5, blue6

for (int i = 1i <ih - 1i++) {

for (int j = 1j <iw - 1j++) {

// alpha值保持不变

alpha = Color.alpha(pixels[i * iw + j])

// 处理red分量

red4 = Color.red(pixels[i * iw + j - 1])

red5 = Color.red(pixels[i * iw + j])

red6 = Color.red(pixels[i * iw + j + 1])

// 水平方向进行中值滤波

if (red4 >= red5) {

if (red5 >= red6) {

red = red5

} else {

if (red4 >= red6) {

red = red6

} else {

red = red4

}

}

} else {

if (red4 >red6) {

red = red4

} else {

if (red5 >red6) {

red = red6

} else {

red = red5

}

}

}

// 处理green分量

green4 = Color.green(pixels[i * iw + j - 1])

green5 = Color.green(pixels[i * iw + j])

green6 = Color.green(pixels[i * iw + j + 1])

// 水平方向进行中值滤波

if (green4 >= green5) {

if (green5 >= green6) {

green = green5

} else {

if (green4 >= green6) {

green = green6

} else {

green = green4

}

}

} else {

if (green4 >green6) {

green = green4

} else {

if (green5 >green6) {

green = green6

} else {

green = green5

}

}

}

// 处理blue分量

blue4 = Color.blue(pixels[i * iw + j - 1])

blue5 = Color.blue(pixels[i * iw + j])

blue6 = Color.blue(pixels[i * iw + j + 1])

// 水平方向进行中值滤波

if (blue4 >= blue5) {

if (blue5 >= blue6) {

blue = blue5

} else {

if (blue4 >= blue6) {

blue = blue6

} else {

blue = blue4

}

}

} else {

if (blue4 >blue6) {

blue = blue4

} else {

if (blue5 >blue6) {

blue = blue6

} else {

blue = blue5

}

}

}

pixels[i * iw + j] = alpha <<24 | red <<16 | green <<8

| blue

}

}

}

/**

* 图像的平滑

*/

public void smooth() {

int[] tempPixels = new int[iw * ih]

//图像的平滑

int min = -1000

int max = 1000

for (int i = 0i <ihi++) {

for (int j = 0j <iwj++) {

if (i == 0 || i == 1 || i == ih - 1 || i == ih - 2 || j == 0

|| j == 1 || j == iw - 1 || j == iw - 2) {

tempPixels[i * iw + j] = pixels[i * iw + j]

} else {

// 中心的九个像素点

float average = (

pixels[i * iw + j]

+ pixels[i * iw + j - 1]

+ pixels[i * iw + j + 1]

+ pixels[(i - 1) * iw + j]

+ pixels[(i - 1) * iw + j - 1]

+ pixels[(i - 1) * iw + j + 1]

+ pixels[(i + 1)]

+ pixels[(i + 1) * iw + j]

+ pixels[(i + 1) * iw + j - 1]

) / 9

tempPixels[i * iw + j] = (int) (average)

}

if (tempPixels[i * iw + j] <min)

min = tempPixels[i * iw + j]

if (tempPixels[i * iw + j] >max)

max = tempPixels[i * iw + j]

}

}

for (int i = 0i <iw * ihi++) {

tempPixels[i] = (tempPixels[i] - min) * 255 / (max - min)

}

pixels = tempPixels

}

}

正好!我做图像处理也遇到这样的问题。我觉得是因为GetPixel这个函数处理耗时较多,加上多个for循环,使得CPU大量早袜磨被占用,在VB中运行则易发生错误或死机。生产exe文件看看,运行时千万不能点鼠标或干别的事,否则立马死机,很久很久程序才会执陆斗行完。主要是:GetPixel这个函数处理耗时较多!

另外,我打算找找好锋别的函数或者方法来获取像素,下来我们可以交流交流~~~~

1、Adobe?PhotoshopTouch

Adobe公司专为手机设计的,可以运行在苹果系统和安卓系统上。支持图层,选择,调整,过滤器,和其他工具,如刷子,刷子,橡皮,选择,等等。您可以从本地存储中选择图片或直接使用相机拍照。

2、pixlrexpress

android图像处理软件,内置600多种特效和滤波器,包括优秀的自由图形软件常见特效滤波器应用、曝光对比调整、相框和特殊光插件等。

但更进一步,增加了移除红眼、移除特定颜色、移除噪音或锐化、加入白光、轴移镜等功能,而每个功能,每个效果都提供详细的调整。让普通用户也可以简单的使特效更加专业。

3、泼辣修图

北京泼辣熊科技有限公司开发推出的免费图像处理软件。用户不需要下载软件并输入网址即可使用。泼辣的图形已经发布了网络版本、ios版本、安卓版本、win10版本和mac版本。

4、天天P图?

腾讯的优图团队已经推出了一个全方位的美图神器后,魅力和水印相机。这是基于团队自己的研究。人脸检测技术和国内一流的五字定位图像处理技术,引入了自然美容妆、魔法妆、疯狂妆、星光镜、光点虚拟、智能景深等多项创新功能。

5、PicsArt照片

一个免费的移动图像编辑器是一个安卓平台的应用程序,以收集照片和照片处理。它可以直接绘制、效果处理、文本添加、添加艺术效果。它也是摄影艺术家的社交网络和摄影作品。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12479281.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存