자바 이미지 분할 처리
16477 단어 그림 분할
package com.langhua.cutFile;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import java.awt.color.ColorSpace;
import javax.imageio.ImageIO;
import com.langhua.ImageUtils.ImageUtils;
public class ChangeImageSize
{
/** *//**
*
* @param srcImageFile
* @param result
* @param scale
* @param flag :true ; false ;
*/
public static void scale(String srcImageFile, String result, int scale, boolean flag)
{
try
{
BufferedImage src = ImageIO.read(new File(srcImageFile)); //
int width = src.getWidth(); //
int height = src.getHeight(); //
if (flag)
{
//
width = width * scale;
height = height * scale;
}
else
{
//
width = width / scale;
height = height / scale;
}
Image image = src.getScaledInstance(width, height, Image.SCALE_DEFAULT);
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); //
g.dispose();
ImageIO.write(tag, "JPEG", new File(result));//
}
catch (IOException e)
{
e.printStackTrace();
}
}
/**
*
* @param srcImageFile
* @param descDir
* @param destWidth
* @param destHeight
*/
public static void cut(String srcImageFile, String descDir, int destWidth, int destHeight)
{
try
{
Image img;
ImageFilter cropFilter;
String dir = null;
//
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getHeight(); //
int srcHeight = bi.getWidth(); //
System.out.println("srcWidth:"+srcWidth);
System.out.println("srcHeight:"+srcHeight);
if (srcWidth > destWidth && srcHeight > destHeight)
{
Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);
destWidth = 300; //
destHeight = 300; //
int cols = 0; //
int rows = 0; //
//
if (srcWidth % destWidth == 0)
{
cols = srcWidth / destWidth;
}
else
{
cols = (int) Math.floor(srcWidth / destWidth) + 1;
}
if (srcHeight % destHeight == 0)
{
rows = srcHeight / destHeight;
}
else
{
rows = (int) Math.floor(srcHeight / destHeight) + 1;
}
//
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
//
// : CropImageFilter(int x,int y,int width,int height)
cropFilter = new CropImageFilter(j * 300, i * 300, destWidth, destHeight);
img = Toolkit.getDefaultToolkit().createImage(
new FilteredImageSource(image.getSource(), cropFilter));
BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(img, 0, 0, null); //
g.dispose();
//
dir = descDir + "cut_image_" + i + "_" + j + ".jpg";
File f = new File(dir);
ImageIO.write(tag, "JPEG",f);
System.out.println(dir);
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)
*/
public static void convert(String source, String result)
{
try
{
File f = new File(source);
f.canRead();
f.canWrite();
BufferedImage src = ImageIO.read(f);
ImageIO.write(src, "JPG", new File(result));
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* @param source
* @param result
*/
public static void gray(String source, String result)
{
try
{
BufferedImage src = ImageIO.read(new File(source));
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op = new ColorConvertOp(cs, null);
src = op.filter(src, null);
ImageIO.write(src, "JPEG", new File(result));
}
catch (IOException e)
{
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args)
{
//scale("c:\\test\\456.jpg","C:\\test\\image1.jpg",2,false);
//cut("c:\\1.jpg","C:\\2.jpg",64,64);
//gray("c:\\test\\456.jpg","C:\\test\\image4.jpg");
}
}
최적화 처리 후
package com.langhua.cutFile;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import com.langhua.ImageUtils.ImageUtils;
public class CutImage {
// :c:\1.jpg
private String srcpath;
// . :c:\2.jpg
private String subpath;
// x
private int x;
private int y;
//
private int width;
private int height;
public CutImage() {
}
public CutImage(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
/**
* , 。
*/
public void cut() throws IOException {
FileInputStream is = null;
ImageInputStream iis = null;
try {
//
is = new FileInputStream(srcpath);
/**
* ImageReader Iterator, ImageReader 。
* :formatName - . ( "jpeg" "tiff") 。
*/
Iterator<ImageReader> it = ImageIO
.getImageReadersByFormatName("jpg");
ImageReader reader = it.next();
//
iis = ImageIO.createImageInputStream(is);
/**
* iis: .true: . ‘ ’。 ,
* reader 。
*/
reader.setInput(iis, true);
/**
* <p>
*
* <p>
* . Java Image I/O 。
* ImageReader getDefaultReadParam ImageReadParam 。
*/
ImageReadParam param = reader.getDefaultReadParam();
/**
* 。Rectangle , Rectangle
* (x,y)、 。
*/
Rectangle rect = new Rectangle(x, y, width, height);
// BufferedImage, 。
param.setSourceRegion(rect);
/**
* ImageReadParam imageIndex ,
* BufferedImage 。
*/
BufferedImage bi = reader.read(0, param);
//
ImageIO.write(bi, "jpg", new File(subpath));
} finally {
if (is != null)
is.close();
if (iis != null)
iis.close();
}
}
/**
*
*
* @param srcImageFile
*
* @param descDir
*
* @param destWidth
*
* @param destHeight
* List,
*/
public static java.util.List<String> cutImg(String srcImageFile,
String descDir, int destWidth, int destHeight) {
java.util.List<String> list = new java.util.ArrayList<String>(9);
try {
String dir = null;
//
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getHeight(); //
int srcHeight = bi.getWidth(); //
if (srcWidth > destWidth && srcHeight > destHeight) {
destWidth = 300; //
destHeight = 300; //
int cols = 0; //
int rows = 0; //
//
if (srcWidth % destWidth == 0) {
cols = srcWidth / destWidth;
} else {
cols = (int) Math.floor(srcWidth / destWidth) + 1;
}
if (srcHeight % destHeight == 0) {
rows = srcHeight / destHeight;
} else {
rows = (int) Math.floor(srcHeight / destHeight) + 1;
}
//
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
CutImage cutImage = new CutImage(j * 300, i * 300, 300,
300);
cutImage.setSrcpath(srcImageFile);
dir = descDir + "cut_image_" + i + "_" + j + ".jpg";
cutImage.setSubpath(dir);
cutImage.cut();
list.add("cut_image_" + i + "_" + j + ".jpg");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public String getSrcpath() {
return srcpath;
}
public void setSrcpath(String srcpath) {
this.srcpath = srcpath;
}
public String getSubpath() {
return subpath;
}
public void setSubpath(String subpath) {
this.subpath = subpath;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 은 재 귀적 인 방식 으로 의미 이미지 분할 기능 을 실현 합 니 다.실현 효과 첫 번 째 그림 은 원 그림 이 고,나머지 그림 은 분 단 된 도형 이다. 코드 구현: 총결산 python 이 재 귀적 인 방식 으로 의미 이미지 분할 을 실현 하 는 것 에 관 한 이 글 은 여기까지 소...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.