图像处理时碰到的一个问题,细节见文章

湘水友独 2014-04-18 02:02:39
现在在做一个手写识别的小程序,
在一个800*350的画板上写了个字符,将其转化成BufferedImage,然后调用代码1,将其缩小成16*16的图片,根据RGB值转化成16*16的0,1矩阵,但是得到的矩阵跟我手写的那个字符完全不符合啊!求大神帮我看看有什么问题。或者说还有什么图像缩小算法吗?
代码1:

/**
*
* @param srcImg 待处理图像
* @param width 缩小后的长度
* @param height 缩小后的宽度
* @return
*/
public BufferedImage SuoImg(BufferedImage srcImg,int width,int height){
BufferedImage targetImg=null;
double Sx=(double)width/srcImg.getWidth();
double Sy=(double)height/srcImg.getHeight();
int type=srcImg.getType();
if(type==0){
ColorModel cm=srcImg.getColorModel();
WritableRaster raster=cm.createCompatibleWritableRaster(width,height);
boolean alpha=cm.isAlphaPremultiplied();
targetImg=new BufferedImage(cm, raster, alpha,null);
}else{
targetImg=new BufferedImage(width, height, type);
}
Graphics2D g2=targetImg.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
g2.drawRenderedImage(srcImg,AffineTransform.getScaleInstance(Sx, Sy));
g2.dispose();
return targetImg;
}
...全文
237 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2014-04-21
  • 打赏
  • 举报
回复
引用 2 楼 czxlylc 的回复:
[quote=引用 1 楼 alan19931103 的回复:] BufferedImage有缩小图像的功能吧
嗯,是有。我发现问题了,是不是因为写的字符笔画太细了,本来缩写区域比较大,把它缩小成16*16,缩小倍数过大,没有笔画显示了[/quote] 楼主的这个说法,我非常赞同。 因为缩小图片,是按照比例来缩小的。如果原图中是细线,按比例缩小后不构成一像素的内容就会被忽略掉。
Inhibitory 2014-04-21
  • 打赏
  • 举报
回复
图片缩小后会丢失很多数据的,很正常的现象。
湘水友独 2014-04-21
  • 打赏
  • 举报
回复
引用 1 楼 alan19931103 的回复:
BufferedImage有缩小图像的功能吧
嗯,是有。我发现问题了,是不是因为写的字符笔画太细了,本来缩写区域比较大,把它缩小成16*16,缩小倍数过大,没有笔画显示了
alan19931103 2014-04-18
  • 打赏
  • 举报
回复
BufferedImage有缩小图像的功能吧

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧