在我的名片阅读器android应用程序中,我需要将彩色图像位图转换为黑色&白色图像位图(而不是灰度图像)用于OCR文本阅读。所以请帮助我将彩色图像位图转换为黑色& android中的白色图像位图。如何将彩色图像位图转换为android中的黑白图像位图?
1
A
回答
0
您需要在android中使用ColorMatrix
和ColorFilter
类才能转换为黑白。 使用此ColorMatrix
- ColorMatrix cm1 = new ColorMatrix(new float[]{0.5f,0.5f,0.5f,0,0, 0.5f,0.5f,0.5f,0,0, 0.5f,0.5f,0.5f,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0 });
1
你可以运用这种方式的彩色滤光片的图像转换:
Bitmap bwBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bwBitmap);
//set contrast
ColorMatrix contrastMatrix = new ColorMatrix();
//change contrast
float contrast = 50.f;
float shift = (-.5f * contrast + .5f) * 255.f;
contrastMatrix .set(new float[] {
contrast , 0, 0, 0, shift ,
0, contrast , 0, 0, shift ,
0, 0, contrast , 0, shift ,
0, 0, 0, 1, 0 });
//apply contrast
Paint contrastPaint = new Paint();
contrastPaint.setColorFilter(new ColorMatrixColorFilter(contrastMatrix));
canvas.drawBitmap(colorBitmap, 0, 0, contrastPaint);
//set saturation
ColorMatrix saturationMatrix = new ColorMatrix();
saturationMatrix.setSaturation(0); //you set color saturation to 0 for b/w
//apply new saturation
Paint saturationPaint = new Paint();
saturationPaint.setColorFilter(new ColorMatrixColorFilter(saturationPaint));
canvas.drawBitmap(colorBitmap, 0, 0, saturationPaint);
1
这个问题很久以前,但可能我可以帮助其他用户。 我也有很长的搜索创建(快速)纯黑白位图。
我的第一个梅索德使用bitmap.getPixel()和bitmap.setPixel() 这花了大约8秒(832 X 1532) 新方法花了0.4秒!感谢因素20!
现在我加载的所有像素int数组和走那么通过所有像素的getPixels用(..)和中的setPixels(..): 这里我的方法:
public static Bitmap createBlackAndWhite(Bitmap src) {
int width = src.getWidth();
int height = src.getHeight();
Bitmap bmOut = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
final float factor = 255f;
final float redBri = 0.2126f;
final float greenBri = 0.2126f;
final float blueBri = 0.0722f;
int length = width * height;
int[] inpixels = new int[length];
int[] oupixels = new int[length];
src.getPixels(inpixels, 0, width, 0, 0, width, height);
int point = 0;
for(int pix: inpixels){
int R = (pix >> 16) & 0xFF;
int G = (pix >> 8) & 0xFF;
int B = pix & 0xFF;
float lum = (redBri * R/factor) + (greenBri * G/factor) + (blueBri * B/factor);
if (lum > 0.4) {
oupixels[point] = 0xFFFFFFFF;
}else{
oupixels[point] = 0xFF000000;
}
point++;
}
bmOut.setPixels(oupixels, 0, width, 0, 0, width, height);
return bmOut;
}
相关问题
- 1. Java OpenCV:如何将彩色图像转换为黑白图像?
- 2. C# - 如何将图像转换为8位彩色图像?
- 3. 如何使用PHP将“真彩色”图像转换为“黑白”图像?
- 4. 如何将彩色图像转换为纯黑白图像(0-255格式)
- 5. 如何将彩色TIFF图像转换为黑白使用BitMiracle.LibTiff.Silverlight.dll
- 6. 如何将现有的彩色图像变成黑白图像?
- 7. Android:将位图转换为单色位图(每像素1位)
- 8. 将图像转换为位图将背景黑色
- 9. 如何在Android中将彩色图像制作成黑白色
- 10. 将彩色指纹图像转换为黑白
- 11. 如何将UIImage转换为iphone上的8位彩色图像?
- 12. 如何使用MFC将24位彩色图像转换为二进制图像?
- 13. 将图像转换为位图android
- 14. 如何在PHP中将图像转换为黑白图像
- 15. 如何将图像转换为位图
- 16. 如何将位图转换为图像
- 17. 将图像转换为位图后,图像为黑色或根本不显示
- 18. 确定图像是黑白图像还是彩色图像
- 19. 转换彩色图像转换成黑白图像使用PHP GD库
- 20. 位图图像转换只显示一个白色图像
- 21. CSS:如何将彩色图像变成灰色或黑色/白色图像
- 22. 了解画布如何将图像转换为黑白图像
- 23. 如何在iOS 6.0中将彩色图像更改为黑白图像?
- 24. 如何转换位图图像的32位到16位色彩质量在C#
- 25. 如何识别图像是黑白还是彩色图像?
- 26. 转换位图图像到黑莓J2ME
- 27. Qt中的图像转换器,黑白色的图像
- 28. 我们如何将FaceDetector.Face转换为android中的位图图像?
- 29. 如何将位图图像转换为CIELab图像?
- 30. 我如何将位图图像转换为emgu图像?
如果我在上面的代码中使用它会产生灰度图像,而不是纯黑白图像,在我的应用程序中需要读取名片/名片中的文字。请帮帮我。 –
通常一个灰度图像被认为是黑白。你想要的是一个高对比度的灰度图像,这样黑灰色变成黑色,浅灰色变成白色。您可以实现更改图像对比度。我编辑了我的评论,插入代码来设置一个ColorMatrix。尝试改变对比度值,为您找到最佳结果。 –
如果我使用上面的ma.set()方法,它将会将grasy-scale图像与对比度一起更改为彩色图像。请帮帮我。 –