我有这些代码来减少图像噪声:
for (int x = 0; x < bitmap.getWidth(); x++) {
for (int y = 0; y < bitmap.getHeight(); y++) {
// get one pixel color
int pixel = processedBitmap.getPixel(x, y);
// retrieve color of RGB
int R = Color.red(pixel);
int G = Color.green(pixel);
int B = Color.blue(pixel);
// convert into single value
R = G = B = (int) (0.299 * R + 0.587 * G + 0.114 * B);
// convert to black and white + remove noise
if (R > 162 && G > 162 && B > 162)
bitmap.setPixel(x, y, Color.WHITE);
else if (R < 162 && G < 162 && B < 162)
bitmap.setPixel(x, y, Color.BLACK);
}
}
但是产生结果需要很长时间。有没有其他方法可以优化这些代码以使其更快?
不要使用 getPixel。 以数组形式获取图像数据,并使用数学访问正确的像素。 编写数学,以便使用尽可能少的乘法。 设置像素相同。
不要使用 Color.red((、Color.green(( 等。 使用屏蔽,它比函数调用更有效。
更好的是,进入 NDK 并在 C 中执行此操作。 Java 中的图像处理通常不是最佳的。