⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snpframe.java

📁 SNP算法: 基于背景缩减和阴影检测的统计方法,适用于室内检测.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package bin;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Graphics;
import java.awt.image.*;
import java.awt.event.*;
import java.awt.*;

import java.net.*;

import java.util.Date;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;

import java.io.IOException;
import java.io.File;
import java.io.FileOutputStream;


public class SNPFrame extends JFrame implements ActionListener{
	public static Color DarkColor = new Color(55, 77, 118); //暗色
    public static Color LightColor = new Color(111, 146, 212); //亮色
    Border emptyBorder = BorderFactory.createEmptyBorder(); //未选中时的边框
	Image icon;
	
	/*主界面容器*/	
	Container cp = this.getContentPane();
	
	/*帮助面板*/
    JPanel helpPanel = new JPanel();
    
    ImageIcon imgSetup, imgHelp, imgAbout;
    
    /*about按钮*/ 
  	JButton aboutButton = new JButton(); //关于
  	
    /*set按钮*/
    JButton setupButton = new JButton(); //设置
    
    /*help按钮*/
    JButton helpButton = new JButton(); //帮助
    
    HelpDialog helpDialog; //帮助对话框
  	AboutDialog aboutDialog; //关于对话框
  	
  
    /*按钮面板*/
    JPanel actionPanel = new JPanel();
    
    /*视频/摄像头*/
    CheckboxGroup cbg = new CheckboxGroup();
	Checkbox selectCb = new Checkbox("选择视频", cbg, true);
	Checkbox vedioCb = new Checkbox("摄像头连接", cbg, false);
	
	JButton useSliderButton = new JButton("使用滑杆条调整参数");//使用滑杆
	JButton startButton=new JButton("SNP处理");//开始按钮
    JButton selectButton = new JButton("选择视频");//选择视频
    JButton saveButton = new JButton("保存图像");//保存处理结果
    JButton binaryButton = new JButton("二值化图");//二值化处理
    JButton pengzhangButton = new JButton("二值膨胀");//二值化膨胀处理
    JButton totalalphaButton = new JButton("光强度和");//光线强度和
    JButton addButton =new JButton("检测区域");//增加检测区域
    JButton delButton =new JButton("删除区域");//删除检测区域
    
    /*滑杆条*/
    JSlider jSlider = new JSlider(0, 10);
 	JTextField jtf = new JTextField("      前景阈值:3.0f     ");
 	JSlider jSlider2 = new JSlider();
 	JTextField jtf2 = new JTextField("     阴影阈值: -3.0f   ");
 	
    /*视频面板*/
    JPanel contentPanel = new JPanel();
    
    /*原始视频面板*/
    JPanel orientpanel = new JPanel();
    
    /*SNP处理结果视频面板*/
    JPanel resultpanel = new JPanel();
    
    /*状态面板*/
    JPanel statusPanel = new JPanel(); //状态栏
    
	Date date = new Date();
	String now = (date.getYear() + 1900) + "年" + (date.getMonth() + 1) + "月" + date.getDate() + "日";    
    public  JTextField statusField = new JTextField(
      "欢迎使用SNP算法演示系统 作者:段俊杰 版本:V1.0\t\t\t\t\t    今天是:" + now);
 	
 	public JLabel tiplabel = new JLabel("起始帧:");
 	public JTextField startframe = new JTextField(3);
 	public JLabel endlabel = new JLabel("帧");
 	
 	public JLabel skiplabel = new JLabel("跳帧:");
 	public JTextField skipnum = new JTextField(3);
 	
 	/*提示当前处理对象*/
 	JLabel tipslabel = new JLabel("            现在对视频图像进行SNP处理");
    Font font = new Font("楷体", Font.BOLD, 30);
        
    /*布尔数值*/
    
    boolean start = false;//是否开始
    boolean saved = false;//是否保存
   
	boolean binaryvalue = false;//是否二值处理
	boolean wantpengzhang = false;//是否膨胀
	 

	boolean totalalpha = false;//光线强度
	
	boolean gety = true;//是否获取Y分量
	
	/*检测区域矩形参数*/
	boolean canchange = true;//矩形是否可变
	
	boolean useslider = false;//是否使用滑杆
	
	int startX, startY, endX, endY;//矩形四个顶点
	
	/*视频文件路径*/
	String path="";
	
	int startframenum = 1;
	int skipframenum = 1;
	
	Dimension faceSize = new Dimension(870, 450);
	
    /*初始常量值*/
    static int totalpic = 1;
    float slidervalue = 3.0f;
	float slidervalue2 = -3.0f;
	
	RecLabel recLabel=new RecLabel();  
    
    public SNPFrame() {
    	initResource();
        try {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            startframe.setText("1");
            skipnum.setText("1");
            snpInit();
             Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    		this.setLocation( (int) (screenSize.width - faceSize.getWidth()) / 2,
                     (int) (screenSize.height - faceSize.getHeight()) / 2);
    		this.setResizable(false);
    		this.setTitle("SNP算法演示"); //设置标题
    		this.setIconImage(icon); //设置程序图标
    
            URLClassLoader urlLoader = (URLClassLoader)this.getClass().getClassLoader();
		    URL url = urlLoader.findResource("images/cursor.gif");
		    Image animateImage = new ImageIcon(url).getImage();
		    Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(
		        animateImage, new Point(0, 0), "cursor");
		    this.setCursor(cursor);
    
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        
    	
			
    }
	
	public void initResource() {
	    
	
	    //程序图标
	    icon = getImage("images/snp.gif");
	

	    imgHelp = new ImageIcon(getImage("images/help.gif"));
	    imgAbout = new ImageIcon(getImage("images/about.gif"));
	
	
	    //初始化对话框
	    helpDialog = new HelpDialog((JFrame)this); //帮助对话框
	    aboutDialog = new AboutDialog((JFrame)this); //关于对话框
    }
  
	  Image getImage(String filename) {
		    URLClassLoader urlLoader = (URLClassLoader)this.getClass().
		        getClassLoader();
		    URL url = null;
		    Image image = null;
		    url = urlLoader.findResource(filename);
		    image = Toolkit.getDefaultToolkit().getImage(url);
		    MediaTracker mediatracker = new MediaTracker(this);
		    try {
		      mediatracker.addImage(image, 0);
		      mediatracker.waitForID(0);
		    }
		    catch (InterruptedException _ex) {
		      image = null;
		    }
		    if (mediatracker.isErrorID(0)) {
		      image = null;
		    }
		
		    return image;
	  }
  
	/*设置是否要计算totalalpha的值*/
    public void setTotalalpha(boolean totalalpha)
    {
    	this.totalalpha = totalalpha;
    }
    
	public void setBinaryvalue(boolean binaryvalue)
    {
    	this.binaryvalue = binaryvalue;
    }
    
    public boolean getBinaryvalue()
    {
    	return this.binaryvalue;
    }
    
     public void setPengzhang(boolean wantpengzhang)
    {
    	this.wantpengzhang = wantpengzhang;
    }
    
    /*获得膨胀状态*/
    public boolean getPengzhang()
    {
    	return this.wantpengzhang;
    }
    
	 public void setSaved(boolean saved)
    {
   	   this.saved = saved;
    } 
    
    public boolean getSaved()
    {
    	return this.saved;
    }
    
 /*   public void setPic(boolean paintpic)
    {
    	this.paintpic = paintpic;
    }
    public boolean getPic()
    {
    	return this.paintpic;
    }*/
    
    public void setStart(boolean start){
    	this.start=start;
    }
    public boolean getStart(){
    	return start;
    }

    public void setRecIcon(BufferedImage inImage){
    	recLabel.setIcon(new ImageIcon(inImage));
    }
    public String getPath(){
    	return "file:"+path;
    }
    public void setPath(String path){
    	this.path=path;
    }
    private void snpInit() throws Exception {
        setSize(870, 450);
        
        /*界面整体布局*/
        Border border = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
        new Color(45, 92, 162),
        new Color(43, 66, 97),
        new Color(45, 92, 162),
        new Color(84, 123, 200));
        
        BorderLayout borderLayout = new BorderLayout();
        
        tipslabel.setForeground(LightColor);
    	tipslabel.setBounds(new Rectangle(600, 30 , 150, 30));
    	tipslabel.setFont(font);
    	
    	
		/*帮助面板初始化*/
		helpPanel.setBackground(DarkColor);
		helpPanel.setPreferredSize(new Dimension(780, 50));
		helpPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		/*按钮面板*/
		actionPanel.setBackground(LightColor);
	    actionPanel.setBorder(border);
	    actionPanel.setPreferredSize(new Dimension(200, 380));
	    actionPanel.setMinimumSize(new Dimension(200, 380));
    
        /*视频面板初始化*/
        JLabel themelabel = new JLabel("SNP算法结果演示");
        themelabel.setForeground(Color.white);
        themelabel.setBounds(new Rectangle(285, 10 , 150, 30));
        
        JLabel orientlabel = new JLabel("原始视频");
        orientlabel.setForeground(Color.YELLOW);
        orientlabel.setBounds(new Rectangle(120, 300 , 100, 30));
        
        JLabel snpresultlabel = new JLabel("SNP处理后视频");
        snpresultlabel.setForeground(Color.YELLOW);
        snpresultlabel.setBounds(new Rectangle(430, 300 , 100, 30));
        
        contentPanel.setBackground(DarkColor);
	    contentPanel.setBorder(border);
	    contentPanel.setPreferredSize(new Dimension(620, 380));
	    contentPanel.setMinimumSize(new Dimension(620, 380));
  		
  		/*状态面板初始化*/
  		statusPanel.setBackground(DarkColor);
	    statusPanel.setBorder(border);
	    statusPanel.setPreferredSize(new Dimension(620, 24));
	    statusPanel.setMinimumSize(new Dimension(620, 24));
	    statusPanel.setLayout(new BorderLayout());
  		
  		cp.setLayout(borderLayout);
	    cp.add(helpPanel, BorderLayout.NORTH);
	    cp.add(actionPanel, BorderLayout.EAST);
	    cp.add(contentPanel, BorderLayout.CENTER);
	    cp.add(statusPanel, BorderLayout.SOUTH);
    
  		/*视频面板初始化*/
  		contentPanel.setLayout(null);
  		orientpanel.setLayout(null);
        resultpanel.setLayout(null);

        orientpanel.setBounds(new Rectangle(10, 50, 320, 240));
  		resultpanel.setBounds(new Rectangle(340,50 , 320, 240));
  		
  		recLabel.setBounds(new Rectangle(0,0,320,240));
		recLabel.setOpaque(true);
		resultpanel.add(recLabel);
		
		contentPanel.add(themelabel);
		contentPanel.add(orientpanel);
  		contentPanel.add(resultpanel);
  		contentPanel.add(orientlabel);
  		contentPanel.add(snpresultlabel);
  		
  		/*按钮面板初始化*/
  		selectCb.setBounds(new Rectangle(0, 0, 87, 31));
        vedioCb.setBounds(new Rectangle(0, 0, 87, 31));
  		actionPanel.add(selectCb);
  		actionPanel.add(vedioCb);
  		
  		actionPanel.add(jSlider);
  		actionPanel.add(jtf);
  		actionPanel.add(jSlider2);
  		actionPanel.add(jtf2);
  		jSlider.setMaximum(1000);
        jSlider.setValue(300);
        jSlider2.setMaximum(700);
        jSlider2.setValue(300);
        jtf.setEnabled(false);
        jtf2.setEnabled(false);
  		
  		actionPanel.add(useSliderButton);
  		actionPanel.add(tiplabel);
  		actionPanel.add(startframe);
  		actionPanel.add(endlabel);
  		
  		actionPanel.add(skiplabel);
  		actionPanel.add(skipnum);
  	//	actionPanel.add(endlabel);
  		
  		actionPanel.add(selectButton);
  		actionPanel.add(startButton);
  		actionPanel.add(saveButton);
  		actionPanel.add(totalalphaButton);
  		actionPanel.add(binaryButton);
  		actionPanel.add(pengzhangButton);
  		actionPanel.add(addButton);
  		actionPanel.add(delButton);
  		
  		addButton.addActionListener(new ActionListener(){
		 	public void actionPerformed(ActionEvent e){
				recLabel.addAction();
			}
		});
		
		delButton.addActionListener(new ActionListener(){
		 	public void actionPerformed(ActionEvent e){
				recLabel.removeAction();
			}
		});
		
		//加入状态栏
	
	    statusPanel.add(statusField, BorderLayout.CENTER);
	    statusField.setEditable(false);
	    statusField.setForeground(Color.white);
	    statusField.setBackground(DarkColor);
	    
	    helpPanel.add(aboutButton);
	    aboutButton.setBorder(emptyBorder);
	    aboutButton.setIcon(imgAbout);
    	aboutButton.addActionListener(this);
    	
    	helpPanel.add(helpButton);
    	helpButton.setBorder(emptyBorder);
    	helpButton.setIcon(imgHelp);
    	helpButton.addActionListener(this);
    	
    	helpPanel.add(tipslabel, FlowLayout.RIGHT);
  	
    }
    
  
	public void actionPerformed(ActionEvent e) {
	    Object obj = e.getSource();
	    if (obj == aboutButton) { //关于
	      aboutDialog.show();
	    }
	    else if (obj == helpButton) { //帮助
	      //new Help();
	      helpDialog.show();
	    }
	  }
	    
     //进度条响应类
    static class SliderListener implements ChangeListener { 
    	SNPFrame frame;
    	public SliderListener(SNPFrame frame){ 
 	        this.frame=frame;
 		} 
    	public void stateChanged(ChangeEvent e) { 
    		JSlider s1 = (JSlider)e.getSource(); 
    		frame.slidervalue = (float)s1.getValue()/100;
    		frame.jtf.setText("前景阈值: "  + frame.slidervalue );
 	    	
    	}
    }
    
     //进度条响应类
    static class SliderListener2 implements ChangeListener { 
    	SNPFrame frame;
    	public SliderListener2(SNPFrame frame){ 
 	        this.frame=frame;
 		} 
    	public void stateChanged(ChangeEvent e) { 
    		JSlider s1 = (JSlider)e.getSource(); 
    		frame.slidervalue2 = -((float)s1.getValue()/100);
    		
    		frame.jtf2.setText("阴影阈值: " + frame.slidervalue2 );
 	    	
    	}
    }
    
    /**/
    static class SliderButtonListener implements ActionListener
    {
    	SNPFrame frame;
    	public SliderButtonListener(SNPFrame frame){ 
 	        this.frame=frame;
 		} 
 		
 		public void actionPerformed(ActionEvent e){
 			JButton btn = (JButton)e.getSource();
 			if(btn.isEnabled())
 			{
 				if(btn.getText().equals("使用滑杆条调整参数"))
 				{
 					frame.useslider = true;
 					frame.jSlider.setEnabled(true);
     				frame.jSlider2.setEnabled(true);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -