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 图像扫描器---基于扫描线相关推荐

  1. 9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度、形态平滑、高帽变换、低帽变换)

    9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度.形态平滑.高帽变换.低帽变换) 文章目录 9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度.形 ...

  2. 二维海浪波数谱的matlab,一种海杂波图像下基于最小区间思想的海浪主波周期反演方法...

    一种海杂波图像下基于最小区间思想的海浪主波周期反演方法 [专利摘要]本发明属于海杂波图像下海浪参数分析[技术领域],具体涉及一种海杂波图像下基于最小区间思想的海浪主波周期反演方法.本发明包括:基于雷达 ...

  3. 用幂次变换来增强图像matlab,基于幂次变换及MSR光照不均图像增强.doc

    基于幂次变换及MSR光照不均图像增强 基于幂次变换及MSR光照不均图像增强摘要:针对光照不均图像暗区细节丢失的问题,提出了基于幂次变换和MSR(多尺度Retinex)的光照不均图像增强算法.首先对光照 ...

  4. open cv平面对象检测及翘曲图像校正-基于FLANN的特征检测和透视变换

    接着上篇FLANN特征匹配,从上篇可以知道,如果特征匹配时全部是用线进行匹配,匹配效果并不能达到一目了然的效果 那么,可不可以把匹配到的结果用矩形或圆表示出来呢 当然可以,这就是平面对象识别 关于基于 ...

  5. 用matlab写的视频截取图像桢,基于MATLAB的储粮害虫图像处理方法

    摘要:在对粮虫图像处理过程中,介绍了Matlab图像处理工具箱中的函数,给出了图像处理 与分析的技术实现, 边缘检测及轮廓提取, 通过形态学方法进行图像特征抽取与分析,达到了比较好的效果. 关键词:粮 ...

  6. c语言 投影法图像定位,基于抛物线拟合和边缘点搜索的虹膜精确定位

    摘  要: 虹膜的定位包括瞳孔(内圆)和虹膜外圆的定位.该方法首先预判断瞳孔中心和半径截取目标区域小图,然后对目标区域提取边缘采用最小二乘抛物线拟合,算出左右固定区域内边缘点极值点坐标,得到瞳孔初始的 ...

  7. matlab画波动图像,【基于Matlab的波动方程的可视化实现最终版材料】

    基于Matlab的波动方程的可视化实现(最终版) <基于Matlab的波动方程的可视化实现.doc>由会员分享,可免费在线阅读全文,更多与<基于Matlab的波动方程的可视化实现(最 ...

  8. c语言图像压缩编码,基于C语言的图像压缩算法

    摘要:该文借鉴静态图像压缩标准JPEG的理论研究成果,将其与DCT快速变换相结合,采用霍夫曼编码方法,用C语言编程实现灰度图像的压缩.最后,计算了基于DCT快速变换的图像压缩算法的压缩比.同时,分析了 ...

  9. html设计一组图像画廊,基于CSS3的图片画廊的设计与实现

    陈纪霞 摘要:CSS3的出现给WEB开发带来了革命性的影响,以前很多需要javascript实现的复杂效果,现在使用简单的CSS3就能实现.该文就利用CSS3实现了一个绚丽的图片画廊效果. 关键词:C ...

最新文章

  1. attention seq2seq transformer bert 学习总结 _20201107
  2. qcustomplot 游标吸附_qcustomplot游标测量功能--Apple的学习笔记
  3. 自定义控件的构建(5)
  4. 数据库服务器属于用电信息采集,智能小区用电信息采集服务器系统和数据处理方法专利_专利查询 - 天眼查...
  5. JDK1.5-1.7 比较二
  6. 数据分析Python:sklearn数据预处理中fit(),transform()与fit_transform()的区别
  7. mongodb及其索引的使用例子
  8. 蓝桥杯 之 基础练习10:十进制转十六进制
  9. 【开源】Tsar——灵活的系统和应用采集软件
  10. 学生管理系统的几个设计模式
  11. 紧急事态分析及处理方法
  12. valgrind检测内存泄露
  13. mdt 计算机名_MDT通过PowerShell脚本自定义变量(自定义计算机名)
  14. AOV网与拓扑排序、拓扑排序算法
  15. 音视频封装格式:FLV
  16. 好看可乐的韩剧综艺-推荐两部
  17. 个人网站搭建,个人网站需要什么软件
  18. 关于电影票对接公众号cps
  19. 福昕阅读器不能编辑情况
  20. javascript中使用枚举定义一个对象进行数据转换

热门文章

  1. 调用c++_WebAssembly: 在C代码中调用JS的函数
  2. matlab作业参考4,matlab第四章作业
  3. To B 企业在营销、产品、服务端的破局之道
  4. 喜讯丨神策数据加入北京信创工委会!
  5. 直播预告丨聚焦银行数字化运营体系搭建,助力银行构建核心竞争力
  6. [LeetCode][JavaScript]Invert Binary Tree 反转二叉树
  7. vmware14安装macos10.12完美可升级10.13
  8. Exp3 免杀原理与实践 20154320 李超
  9. SpringCloud运行时刷新数据源相关配置
  10. win7 绿色版MySQL安装与配置