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

📄 difference.java

📁 最近去看監視器材,看到他們的監視軟體 就突發奇想自己來寫一個看看 程式會把移動中的物體用綠色框框起來 並且把當時的影像存成jpg檔(我把這個功能註解起來了) 我這個程式是在Ultr
💻 JAVA
字号:
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import java.awt.event.*;

public class difference	extends	JFrame
{
	private	final int COLOR_DIFFERENCE=25;
	private	final int DIFFERENCE_TIMES=0;
	private	BufferedImage imageOrgOld;
	private	BufferedImage imageOrg;
	private	BufferedImage differenceImageOld;
	private	BufferedImage differenceImage;
	private	BufferedImage diffOrgImage;
	private	int threshold =	200;
	private	Color on = Color.white;
	private	Color off = Color.black;
	private	Color move = Color.green;

	private	int cal[][];
	private	int moveCenter[]={0,0};

	private	noiceHandle noiceHandler=new noiceHandle();
	private	movementIdentify movementIdentifer=new movementIdentify();

	public difference(BufferedImage	imageOrg)
	{
		addWindowListener(new WindowListener());
		this.imageOrg=imageOrg;
//		setSize(imageOrg.getWidth(this)+20,imageOrg.getHeight(this)+50);
		cal=new	int[imageOrg.getWidth(this)][imageOrg.getHeight(this)];

		for(int	loop1 =	0; loop1 < imageOrg.getWidth(this); loop1++)
			for(int	loop2 =	0; loop2 < imageOrg.getHeight(this); loop2++)cal[loop1][loop2]=0;

//		setLocation(380,0);
//		setVisible(true);
//		setBackground(Color.black);
	}

	public BufferedImage doProcess(BufferedImage imageOrg)
	{
		if(imageOrgOld!=null)
		{
			this.imageOrg=imageOrg;
			differenceImage	= new BufferedImage(imageOrg.getWidth(this), imageOrg.getHeight(this), BufferedImage.TYPE_INT_ARGB);
			diffOrgImage = new BufferedImage(imageOrg.getWidth(this), imageOrg.getHeight(this), BufferedImage.TYPE_INT_ARGB);


			for(int	loop1 =	0; loop1 < imageOrg.getWidth(this); loop1++)
			{
				for(int	loop2 =	0; loop2 < imageOrg.getHeight(this); loop2++)
				{
					Color pixelOld = new Color(imageOrgOld.getRGB(loop1,loop2));
					Color pixel = new Color(imageOrg.getRGB(loop1,loop2));
					try{
						Color pixelDiffOld = new Color(differenceImageOld.getRGB(loop1,loop2));
					}catch(NullPointerException e){}

					int numberRGB[]=new int[3];
					numberRGB[0]=Math.abs(pixelOld.getRed()-pixel.getRed());
					numberRGB[1]=Math.abs(pixelOld.getGreen()-pixel.getGreen());
					numberRGB[2]=Math.abs(pixelOld.getBlue()-pixel.getBlue());

					if(numberRGB[0]<COLOR_DIFFERENCE||numberRGB[1]<COLOR_DIFFERENCE||numberRGB[2]<COLOR_DIFFERENCE)
					{
						if(cal[loop1][loop2]==0)differenceImage.setRGB(loop1,loop2,off.getRGB());
						else cal[loop1][loop2]=0;
					}
					else
					{
						if(cal[loop1][loop2]==DIFFERENCE_TIMES)differenceImage.setRGB(loop1,loop2,on.getRGB());
						else cal[loop1][loop2]++;
					}
				}
			}

			differenceImage=noiceHandler.noiceReduce(differenceImage);
			differenceImage=noiceHandler.imageRecover(differenceImage);
			differenceImage=movementIdentifer.identify(differenceImage);

			for(int	loop1 =	0; loop1 < imageOrg.getWidth(this); loop1++)
			{
				for(int	loop2 =	0; loop2 < imageOrg.getHeight(this); loop2++)
				{
					if(differenceImage.getRGB(loop1,loop2)==on.getRGB())diffOrgImage.setRGB(loop1,loop2,move.getRGB());
					else diffOrgImage.setRGB(loop1,loop2,imageOrg.getRGB(loop1,loop2));
				}
			}

			moveCenter=movementIdentifer.movementCenter(moveCenter[0],moveCenter[1]);
			for(int	x=-4;x<=4;x++)
			{
				for(int	y=-4;y<=4;y++)
				{
					try
					{
						if(Math.abs(Math.sqrt((double)x*(double)x+(double)y*(double)y))<=2)diffOrgImage.setRGB(moveCenter[0]+x,moveCenter[1]+y,on.getRGB());
						if(Math.abs(Math.sqrt((double)x*(double)x+(double)y*(double)y))>=4)diffOrgImage.setRGB(moveCenter[0]+x,moveCenter[1]+y,on.getRGB());

					}catch(ArrayIndexOutOfBoundsException e){}
				}
			}


			repaint();
		}
		imageOrgOld=imageOrg;
		differenceImageOld=differenceImage;
		return diffOrgImage;
	}

	public boolean movementWarning(int degree)
	{
		if(movementIdentifer.movementDegree()>=degree)return(true);
		return(false);
	}

/*
	public void paint(Graphics g)
	{
		if (differenceImage != null)
		{
			g.drawImage(diffOrgImage,10,40,this);
		}
	}

	public void update(Graphics g)
	{
		paint(g);
	}
*/

	class WindowListener extends WindowAdapter
	{
		public void windowClosing(WindowEvent e)
		{
			System.exit(0);
		}
	}
}

⌨️ 快捷键说明

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