Atitit 图像扫描器---基于扫描线
?
?
?
?
?
Atitit 圖像掃描器---基于掃描線
?
調用范例
?* @throws?FileExistEx
?*/
public?static?void?main(String[]?args)?throws?FileExistEx?{
String?s?=?"C:\\00p\\a1115_210836_162 dilate.jpg.png";
String?ext?=?filex.getExtName(s);
// s="C:\\00capch\\p5.jpg";
BufferedImage?src?=?imgx.toImg(s);
?
ImgTraver_lineScaner?trvr?=?new?ImgTraver_lineScaner().setSrc(src);
trvr.cur_Pix_Point_process_Fun_Handler?=?pnt?->?{
int?rgb?=?src.getRGB(pnt.x,?pnt.y);
HSV?hsv?=?ColorUtil.rgb2hsv(rgb);
// System.out.println(pnt+ "hsv:"+hsv);
if?(hsv.v?<?0.6)?// dark clolor
throw?new?CurPixArrivdBoderEx();
};
Rectangle?rect?=?trvr.trav();
?
package com.attilax.img;
?
import java.awt.Color;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.util.function.Function;
?
import com.attilax.img.other.CurPixArrivdBoderEx;
import com.attilax.img.other.LineArrivdBorderEx;
import com.attilax.img.other.NewLineColorCheck;
import com.attilax.img.other.ProcessPointColor;
import com.attilax.io.FileExistEx;
import com.attilax.io.filex;
?
public class ImgTraver_lineScaner {
public static void main(String[] args) {
String s = "C:\\00p\\a1115_210836_162 dilate.jpg";
// s="C:\\00capch\\p5.jpg";
BufferedImage src = imgx.toImg(s);
// Rectangle rect=new ImgTraver_lineScaner().setSrc(src)
//new Rectangle(x, y, width, height)
// t();
System.out.println("--f");
}
?
private static void t() {
BufferedImage dest = null ;//= new DilateFilterV3().filter(src, null);
?
// BufferedImage dest= imgx.clone(src);
try {
imgx.save_png(dest, "C:\\00p\\a" + filex.getUUidName() + " dilate.jpg",false);
} catch (FileExistEx e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public BufferedImage getSrc() {
return src;
}
?
public ImgTraver_lineScaner setSrc(BufferedImage src) {
this.src = src;return this;
}
?
public void trave_downScan_lineByline(BufferedImage src, Point ini_select_Point_just4x) throws LineArrivdBorderEx ?{
int width = src.getWidth();
int height = src.getHeight();
?
for (int y = ini_select_Point_just4x.y; y < height; y++) {
?
scanLine(src, ini_select_Point_just4x, y);
?
}
?
}
?
public void trave_toDownScan_lineByline(BufferedImage src, Point ini_select_Point_just4x) throws LineArrivdBorderEx, CurPixArrivdBoderEx ?{
int width = src.getWidth();
int height = src.getHeight();
?
for (int y = ini_select_Point_just4x.y; y < height; y++) {
?
?
scanLineV2(src, ini_select_Point_just4x, y);
?
?
}
?
}
public ProcessPointColor ?cur_Pix_Point_process_Fun_Handler;
public Function<Integer,Boolean> ?checkIsMeetBorderPix_Handler;
public Function ?new_line_upNdown_evt_handler;
public Function ?new_line_scanFinish_evt_handler;
private BufferedImage src;
//public ?NewLineColorCheck ?newLineFirstColorCheckFun;
private void scanLine(BufferedImage src, Point ini_selectedPoint, int y) throws LineArrivdBorderEx ?????{
new_line_upNdown_evt_handler.apply(new Point(ini_selectedPoint.x,y));
int cur_line_point_color = src.getRGB(ini_selectedPoint.x, y);// x is ini,y is next line point
?
if (checkIsMeetBorderPix_Handler.apply(cur_line_point_color))
throw new LineArrivdBorderEx();
?
// left scan
try {
leftScan(src, ini_selectedPoint, y);
} catch (CurPixArrivdBoderEx e) {
?
}
// right scan
try {
rightScan(src, ini_selectedPoint, y);
} catch (CurPixArrivdBoderEx e) {
?
}
}
private void scanLineV2(BufferedImage src, Point ini_selectedPoint, int y) throws LineArrivdBorderEx, CurPixArrivdBoderEx ?????{
if(new_line_upNdown_evt_handler!=null)
new_line_upNdown_evt_handler.apply(new Point(ini_selectedPoint.x,y));
int cur_line_point_color = src.getRGB(ini_selectedPoint.x, y);// x is ini,y is next line point
?
if(checkIsMeetBorderPix_Handler!=null)
if (checkIsMeetBorderPix_Handler.apply(cur_line_point_color))
throw new LineArrivdBorderEx();
?
// left scan
?
leftScan(src, ini_selectedPoint, y);
??
?
// right scan
?
rightScan(src, ini_selectedPoint, y);
?
}
public void trave_upScan_lineByLine(BufferedImage src, Point ini_selectedPoint) throws ??LineArrivdBorderEx {
int width = src.getWidth();
int height = src.getHeight();
// ?ini_select_color_int = src.getRGB(ini_selectedPoint.x, ini_selectedPoint.y);
?
for (int y = ini_selectedPoint.y-1; y >0; y--) {
?
scanLine(src, ini_selectedPoint, y);
?
}
?
}
public void trave_toUpScan_lineByLine(BufferedImage src, Point ini_selectedPoint) throws ??LineArrivdBorderEx, CurPixArrivdBoderEx {
int width = src.getWidth();
int height = src.getHeight();
// ?ini_select_color_int = src.getRGB(ini_selectedPoint.x, ini_selectedPoint.y);
?
for (int y = ini_selectedPoint.y-1; y >0; y--) {
?
scanLineV2(src, ini_selectedPoint, y);
?
}
?
}
public void trave_toRitScan_lineByLine(int startX) throws ??LineArrivdBorderEx, CurPixArrivdBoderEx {
int width = src.getWidth();
int height = src.getHeight();
// ?ini_select_color_int = src.getRGB(ini_selectedPoint.x, ini_selectedPoint.y);
?
for (int x = startX; x<src.getWidth(); x++) {
?
scanLine_vert(x);
//scanLine(src, ini_selectedPoint, y);
if(new_line_scanFinish_evt_handler!=null)
new_line_scanFinish_evt_handler.apply(null);
}
?
}
?
/**
attilax ???2016年11月16日 ?下午3:13:00
?* @param src
?* @param x
?* @throws CurPixArrivdBoderEx
?*/
@Deprecated
private void scanLine_vert_toRit(BufferedImage src, int x) throws CurPixArrivdBoderEx {
for (int y = 0; y<src.getHeight(); y++) {
if(x==15)
System.out.println("dbg");
Point preLeftPoint=new Point(x, y);
if(x<9)
{
System.out.println("dbg");
}
?int clr=src.getRGB(preLeftPoint.x,preLeftPoint. y);
?//if(checkIsMeetBorderPix_Handler.apply(clr))
??this.cur_Pix_Point_process_Fun_Handler.apply(preLeftPoint);
//
?
}
}
public Point nowPoint;
?
public void trave_toLeftScan_lineByLine(int startX) throws ??LineArrivdBorderEx {
int width = src.getWidth();
int height = src.getHeight();
// ?ini_select_color_int = src.getRGB(ini_selectedPoint.x, ini_selectedPoint.y);
?
for (int x=startX;x>0;x--) {
?
try {
scanLine_vert( x);
} catch (CurPixArrivdBoderEx e) {
throw new LineArrivdBorderEx();
}
?
}
?
}
?
?
/**
attilax ???2016年11月16日 ?下午3:23:11
?* @param x
?* @throws CurPixArrivdBoderEx
?*/
private void scanLine_vert(int x) throws CurPixArrivdBoderEx {
for (int y = 0; y<src.getHeight(); y++) {
nowPoint=new Point(x, y);
if(x==15)
System.out.println("dbg");
Point preLeftPoint=new Point(x, y);
if(x<9)
{
System.out.println("dbg");
}
?int clr=src.getRGB(preLeftPoint.x,preLeftPoint. y);
?//if(checkIsMeetBorderPix_Handler.apply(clr))
??this.cur_Pix_Point_process_Fun_Handler.apply(preLeftPoint);
//
?
}
}
?
/**
?* left and curSelectPoint
?* @param src
?* @param ini_selectedPoint
?* @param y
?* @throws CurPixArrivdBoderEx
?*/
private void leftScan(BufferedImage src,Point ini_selectedPoint, int y) throws CurPixArrivdBoderEx {
for (int x = ini_selectedPoint.x; x > 0; x--) {
if(x==15)
System.out.println("dbg");
Point preLeftPoint=new Point(x, y);
if(x<9)
{
System.out.println("dbg");
}
?int clr=src.getRGB(preLeftPoint.x,preLeftPoint. y);
?//if(checkIsMeetBorderPix_Handler.apply(clr))
??this.cur_Pix_Point_process_Fun_Handler.apply(preLeftPoint);
//
?
}
}
?
?
?
private void rightScan(BufferedImage src, ?Point selectedPoint, int y) throws CurPixArrivdBoderEx {
//int select_color_int = src.getRGB(selectedPoint.x, selectedPoint.y);//-65536 red
//Color curClr=new Color(ini_select_color_int);
for (int x = selectedPoint.x+1; x < src.getWidth(); x++) {
?
Point nextRightPoint=new Point(x, y);
nowPoint=nextRightPoint;
this.cur_Pix_Point_process_Fun_Handler.apply(nextRightPoint);
}
}
?
/**
attilax ???2016年11月9日 ?下午6:47:18
?* @param img
?* @param startPixPoint
?*/
public void scan_Byline_from_startPixPoint(BufferedImage img, Point startPixPoint) {
try {
trave_downScan_lineByline(img, startPixPoint);
} catch (LineArrivdBorderEx e) {
?
}
?
try {
trave_upScan_lineByLine(img, startPixPoint);
} catch (LineArrivdBorderEx e) {
?
}
}
?
/**
attilax ???2016年11月16日 ?下午3:37:24
?* @return
?*/
public ?Rectangle trav() {
int ?lastX = 0; int x = 0;int y = 0;int lastY = 0;
try {
trave_toLeftScan_lineByLine(src.getWidth()-1);
} catch (LineArrivdBorderEx e ) {
?
System.out.println(e.getMessage());
lastX=nowPoint.x;
if(lastX+2 <src.getWidth())
lastX=lastX+2;
}
try {
trave_toRitScan_lineByLine(0);
} catch (LineArrivdBorderEx | CurPixArrivdBoderEx e) {
System.out.println(e.getMessage());
x=nowPoint.x;
if(x-1!=0)
x=x-1;
}
try {
trave_toDownScan_lineByline(src,new Point(0,0) ?);
} catch (LineArrivdBorderEx | CurPixArrivdBoderEx e) {
System.out.println(e.getMessage());
y=nowPoint.y;
if(y-1!=0)
y=y-1;
}
try {
trave_toUpScan_lineByLine(src, new Point(0,src.getHeight()-1 ));
} catch (LineArrivdBorderEx | CurPixArrivdBoderEx e) {
System.out.println(e.getMessage());
lastY=nowPoint.y;
if(lastY+2 <src.getHeight())
lastY=lastY+2;
}
return new Rectangle(x, y, lastX-x, lastY-y);
}
?
?
}
?
?
作者::?綽號:老哇的爪子?(?全名::Attilax?Akbar?Al?Rapanui?阿提拉克斯?阿克巴?阿爾?拉帕努伊?)?
漢字名:艾提拉(艾龍),???EMAIL:1466519819@qq.com
轉載請注明來源:?http://www.cnblogs.com/attilax/
Atiend
?
?
總結
以上是生活随笔為你收集整理的Atitit 图像扫描器---基于扫描线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongoDB-3.x启用认证
- 下一篇: Hadoop HA+Federation