(JAVA)获取图片轮廓
来源:互联网 发布:小米平板2网络模块坏 编辑:程序博客网 时间:2024/05/23 17:46
原始图片类型为 jpg(type:TYPE_3BYTE_BGR)
1.读取图片
File filepath = new File("e://shang.jpg"); //image file pathBufferedImage image = ImageIO.read(filepath); //image's read_bufferint type= image.getType(); //image's type TYPE_3BYTE_BGR = 5
2.获取图片像素值
image.getRGB(x, y)//point (x,y) pixel
3.创建新图片
BufferedImage outImg = null;outImg = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);//TYPE_INT_ARGB是color model
4.设置图片像素值
outImg.setRGB(x, y, rgb);
5.保存新图片
File outFile = new File("e://generate.png"); try { ImageIO.write(outImg, "png", outFile); } catch (IOException e) { e.printStackTrace(); }
整体程序
import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.awt.Rectangle;import java.awt.image.Raster;import javax.imageio.ImageIO;public class getImg { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File filepath = new File("e://shang.jpg"); //image file path BufferedImage image = ImageIO.read(filepath); //image's read_buffer int type= image.getType(); //image's type TYPE_3BYTE_BGR = 5 Raster ra = image.getData(); Rectangle rect = ra.getBounds(); int nImageDate[] = new int[rect.height*rect.width]; int nTemp[] = new int[rect.width*rect.height]; //nImageDate = ra.getPixels(0,0,rect.width, rect.height,nTemp); //nImageDate = image.getRGB(0, 0, image.getWidth(), image.getHeight(), nTemp, 0, 0); System.out.println( "type: "+type ); System.out.println( "image.width: "+ image.getWidth() ); System.out.println( "image.height: "+ image.getHeight() ); BufferedImage outImg = null; outImg = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); int x,y; int rgb; for( y=0;y<259;y++) //按行扫描 { for( x=0;x<282;x++) { if( x==0 || y==0 || x==281 || y==258 ) continue; rgb = image.getRGB(x, y); if( image.getRGB(x, y)!=-1 && (image.getRGB(x-1, y)==-1||image.getRGB(x+1, y)==-1) ){ //判断该点是不是轮廓点 outImg.setRGB(x, y, rgb); System.out.println(rgb); } } } for( x=0;x<282;x++) //按列扫描 { for( y=0;y<259;y++) { if( x==0 || y==0 || x==281 || y==258 ) continue; rgb = image.getRGB(x, y); if( image.getRGB(x, y)!=-1 && (image.getRGB(x, y+1)==-1||image.getRGB(x, y-1)==-1) ){ //判断该点是不是轮廓点 outImg.setRGB(x, y, rgb); } } } //outImg.setRGB( 0, 0, image.getWidth(), image.getHeight(), nTemp, 0 , image.getWidth() ); File outFile = new File("e://generate.png"); try { ImageIO.write(outImg, "png", outFile); } catch (IOException e) { e.printStackTrace(); } }}
参考
BufferedImage类
http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/java/awt/image/BufferedImage.html#getRGB%28int,%20int%29
0 0
- (JAVA)获取图片轮廓
- 使用透明度获取图片轮廓动态修改图片颜色
- java 合并一个图片到另一个图片的轮廓
- 图片的轮廓
- OpenCV -- 找图片轮廓
- 获取轮廓内图像
- opencv获取轮廓
- 图像轮廓获取opencv
- 获取焊缝的轮廓
- JNI获取Bitmap轮廓
- 获取最大轮廓 opencv
- 获取轮廓深度
- OpenCV实现图片轮廓检测(Python实现)
- opencv-图像二值化、阈值获取、直方图、轮廓提取(转)
- opencv-图像二值化、阈值获取、直方图、轮廓提取(转)
- java获取图片
- java获取远程图片
- Java获取网络图片
- Linux下安装MySql
- IOS之initWithFrame
- Android基本控件ListView的使用总结
- Android开发入门------开发环境的搭建
- 图标字体IcoMoon免费的可定制
- (JAVA)获取图片轮廓
- Viewpager--无限循环新闻banner图(支持手动和自动)
- 启用Nginx目录浏览功能的方法
- Java Servlet工作原理问答
- 35 个 Java 代码性能优化总结
- 常用进程调度算法分析和求解 FCFS SJF RR 高响应比 等
- 进程(线程)间同步互斥问题(四) 三个烟鬼问题
- 喜讯:我站(yav.cc)双11活动提前来临咯
- 关于kafka中的timestamp与offset的对应关系