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

📄 colorgrow.cpp

📁 使用大恒采集卡的图像显示
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				xy6g=imageing[x+j+1][y+i]-imageing[x][y];
				xy6b=imageinb[x+j+1][y+i]-imageinb[x][y];

				xy8r=imageinr[x+j][y+i+1]-imageinr[x][y];
				xy8g=imageing[x+j][y+i+1]-imageing[x][y];
				xy8b=imageinb[x+j][y+i+1]-imageinb[x][y];

				sum=ABS(0.3*xy2r+0.59*xy2g+0.11*xy2b)*2+ABS(-0.1684*xy2r-0.3316*xy2g+0.5*xy2b)+ABS(0.5*xy2r-0.4187*xy2g-0.0813*xy2b)+
					ABS(0.3*xy4r+0.59*xy4g+0.11*xy4b)*2+ABS(-0.1684*xy4r-0.3316*xy4g+0.5*xy4b)+ABS(0.5*xy4r-0.4187*xy4g-0.0813*xy4b)+
					ABS(0.3*xy6r+0.59*xy6g+0.11*xy6b)*2+ABS(-0.1684*xy6r-0.3316*xy6g+0.5*xy6b)+ABS(0.5*xy6r-0.4187*xy6g-0.0813*xy6b)+
					ABS(0.3*xy8r+0.59*xy8g+0.11*xy8b)*2+ABS(-0.1684*xy8r-0.3316*xy8g+0.5*xy8b)+ABS(0.5*xy8r-0.4187*xy8g-0.0813*xy8b);

					if(sum<240)
					{
						imageinr[x+j][y+i]=0;
						imageing[x+j][y+i]=255;
						imageinb[x+j][y+i]=0;
						l++;
					}

			}*/
		}
		}

		if(cnt4>0&&i<x)
		{
			s+=cnt4;
			cnt4=0;
			m40=MIN(i,y-h);
			m4=MIN(i,y);
			mix++;
		for(j=m40;j>-m4;j--)
		{			
//			xy5r=imageinr[x-i][y+j]-imageinr[x][y];
//			xy5g=imageing[x-i][y+j]-imageing[x][y];
//			xy5b=imageinb[x-i][y+j]-imageinb[x][y];

			y5=0.3*imageinr[x-i][y+j]+0.59*imageing[x-i][y+j]+0.11*imageinb[x-i][y+j];
			u5=-0.17*imageinr[x-i][y+j]-0.33*imageing[x-i][y+j]+0.5*imageinb[x-i][y+j];
			v5=0.5*imageinr[x-i][y+j]-0.42*imageing[x-i][y+j]-0.08*imageinb[x-i][y+j];
			fi=ABS(y5-y0);
			fs=ABS(sqrt(u5*u5+v5*v5)-sqrt(u0*u0+v0*v0));
			fh=(int)(100*ABS((u5*v0-v5*u0)/(u5*u0+v5*v0)));

//			sum=ABS(0.3*xy5r+0.59*xy5g+0.11*xy5b)*2+ABS(-0.1684*xy5r-0.3316*xy5g+0.5*xy5b)+
//						ABS(0.5*xy5r-0.4187*xy5g-0.0813*xy5b);
			if(fi<30&&fs<15&&fh<10)
			{
				cnt4++;
//				imageinr[x-i][y+j]=255-imager0;
//				imageing[x-i][y+j]=255-imageg0;
//				imageinb[x-i][y+j]=255-imageb0;

				imageinr[x-i][y+j]=0;
				imageing[x-i][y+j]=0;
				imageinb[x-i][y+j]=0;

				sx+=-i;
				sy+=j;

/*				if(j<mix) mix=-i;
				if(j>max) max=-i;
				if(i<miy) miy=j;
				if(i>may) may=j;*/
			}

/*			else 
			{
				xy2r=imageinr[x-i][y+j-1]-imageinr[x][y];
				xy2g=imageing[x-i][y+j-1]-imageing[x][y];
				xy2b=imageinb[x-i][y+j-1]-imageinb[x][y];

				xy4r=imageinr[x-i-1][y+j]-imageinr[x][y];
				xy4g=imageing[x-i-1][y+j]-imageing[x][y];
				xy4b=imageinb[x-i-1][y+j]-imageinb[x][y];

				xy6r=imageinr[x-i+1][y+j]-imageinr[x][y];
				xy6g=imageing[x-i+1][y+j]-imageing[x][y];
				xy6b=imageinb[x-i+1][y+j]-imageinb[x][y];

				xy8r=imageinr[x-i][y+j+1]-imageinr[x][y];
				xy8g=imageing[x-i][y+j+1]-imageing[x][y];
				xy8b=imageinb[x-i][y+j+1]-imageinb[x][y];

				sum=ABS(0.3*xy2r+0.59*xy2g+0.11*xy2b)*2+ABS(-0.1684*xy2r-0.3316*xy2g+0.5*xy2b)+ABS(0.5*xy2r-0.4187*xy2g-0.0813*xy2b)+
					ABS(0.3*xy4r+0.59*xy4g+0.11*xy4b)*2+ABS(-0.1684*xy4r-0.3316*xy4g+0.5*xy4b)+ABS(0.5*xy4r-0.4187*xy4g-0.0813*xy4b)+
					ABS(0.3*xy6r+0.59*xy6g+0.11*xy6b)*2+ABS(-0.1684*xy6r-0.3316*xy6g+0.5*xy6b)+ABS(0.5*xy6r-0.4187*xy6g-0.0813*xy6b)+
					ABS(0.3*xy8r+0.59*xy8g+0.11*xy8b)*2+ABS(-0.1684*xy8r-0.3316*xy8g+0.5*xy8b)+ABS(0.5*xy8r-0.4187*xy8g-0.0813*xy8b);

					if(sum<240)
					{
						imageinr[x-i][y+j]=0;
						imageing[x-i][y+j]=255;
						imageinb[x-i][y+j]=0;
						l++;
					}
				
			}*/
		}
		}
	}
	s-=4;
	if(s<1) s=1;
	int xx=sx/s+x;
	int yy=sy/s+y;

	int mh=(miy+may)/2;
	int mw=(mix+max)/2;
	if((mw+xx)>40) mw=40-xx;
	else if((xx-mw)<0) mw=xx;
	if((mh+yy)>40) mh=40-yy;
	else if((yy-mh)<0) mh=yy;
//	*x_x=xx;
//	*y_y=yy;
	for(i=-mh;i<mh;i++)
		for(j=-mw;j<mw;j++)
//	for(i=-miy;i<may;i++)
//		for(j=-mix;j<max;j++)
		{
/*			imageinr[j+x][i+y]=0;
			imageing[j+x][i+y]=255;
			imageinb[j+x][i+y]=0;*/

			imageinr[j+xx][i+yy]=0;
			imageing[j+xx][i+yy]=255;
			imageinb[j+xx][i+yy]=0;
		}

}

void CColorGrow::Grow2(int imageinr[][200], int imageing[][200], int imageinb[][200], int *x_x, int *y_y, int w, int h, int *R, int *G, int *B)
{
	double y0,u0,v0,y5,u5,v5;
	double fi,fs,fh;
	double sat0,fhue0,sat5,fhue5,length;
	int x=*x_x;
	int y=*y_y;
	int imager0=imageinr[x][y];
	int imageg0=imageing[x][y];
	int imageb0=imageinb[x][y];

	y0=0.3*imager0+0.59*imageg0+0.11*imageb0;
	u0=-0.17*imager0-0.33*imageg0+0.5*imageb0;
	v0=0.5*imager0-0.42*imageg0-0.08*imageb0;

	length=u0*u0+v0*v0;
	sat0=sqrt(length);

	if(sat0>0)
	{
		fhue0=atan2(u0,v0)*180.0/PIE;
		if(fhue0<0) fhue0=fhue0+360.0;				
	}
	else fhue0=0;

//	sat0=65;
//	fhue0=319;
	for(int i=0;i<h;i++)
	{
		for(int j=0;j<w;j++)
		{
			y5=0.3*imageinr[j][i]+0.59*imageing[j][i]+0.11*imageinb[j][i];
			u5=-0.17*imageinr[j][i]-0.33*imageing[j][i]+0.5*imageinb[j][i];
			v5=0.5*imageinr[j][i]-0.42*imageing[j][i]-0.08*imageinb[j][i];
			
			fi=ABS(y5-y0);
			fs=ABS(sqrt(u5*u5+v5*v5)-sqrt(u0*u0+v0*v0));
			fh=100.0*ABS((u5*v0-v5*u0)/(u5*u0+v5*v0));

			length=u5*u5+v5*v5;
			sat5=sqrt(length);

			if(sat5>0)
			{
				fhue5=atan2(u5,v5)*180.0/PIE;
				if(fhue5<0) fhue5=fhue5+360.0;				
			}
			else fhue5=0;

//			fh=ABS(fhue5-fhue0);
//			fs=ABS(sat5-sat0);
			if(fh<10&&fs<15)
			{
				imageinr[j][i]=imageing[j][i]=imageinb[j][i]=0;
			}

		}
	}
}

void CColorGrow::Grow3(int imageinr[][200], int imageing[][200], int imageinb[][200], int *x_x, int *y_y, int w, int h, int n, int *R, int *G, int *B)
{
	int i,j,cnt1,cnt2,cnt3,cnt4;

	double y0,u0,v0;
	double y5,u5,v5;

	int s,l,sx,sy;
	int m1,m2,m3,m4,m10,m20,m30,m40;
	double fi,fs,fh;
	cnt1=cnt2=cnt3=cnt4=1;
	s=l=sx=sy=0;
	int x=*x_x;
	int y=*y_y;
	int imager0=imageinr[x][y];
	int imageg0=imageing[x][y];
	int imageb0=imageinb[x][y];



	y0=0.3*imager0+0.59*imageg0+0.11*imageb0;
	u0=-0.17*imager0-0.33*imageg0+0.5*imageb0;
	v0=0.5*imager0-0.42*imageg0-0.08*imageb0;

	int max,mix,may,miy;
	max=may=0;
	mix=miy=0;

	
	
	for(i=1;i<n;i++)
	{
		if(cnt1>0&&i<y)
		{
			s+=cnt1;
			cnt1=0;
			m10=MIN(i,x);
			m1=MIN(i,w-x);
			miy++;
		for(j=-m10;j<m1;j++)
		{

			y5=0.3*imageinr[x+j][y-i]+0.59*imageing[x+j][y-i]+0.11*imageinb[x+j][y-i];
			u5=-0.17*imageinr[x+j][y-i]-0.33*imageing[x+j][y-i]+0.5*imageinb[x+j][y-i];
			v5=0.5*imageinr[x+j][y-i]-0.42*imageing[x+j][y-i]-0.08*imageinb[x+j][y-i];


			fi=ABS(y5-y0);
			fs=ABS(sqrt(u5*u5+v5*v5)-sqrt(u0*u0+v0*v0));
			fh=(int)(100.0*ABS((u5*v0-v5*u0)/(u5*u0+v5*v0)));
			double ss=100.0*ABS((u5*v0-v5*u0)/(float)(u5*u0+v5*v0));
			if(fi<30&&fs<15&&fh<10)
			{
				cnt1++;

				imageinr[x+j][y-i]=0;
				imageing[x+j][y-i]=0;
				imageinb[x+j][y-i]=0;
				
				sx+=j;
				sy+=-i;

		}
		}

		if(cnt2>0&&i<w-x)
		{
			s+=cnt2;
			cnt2=0;
			m20=MIN(i,y);
			m2=MIN(i,h-y);
			max++;
		for(j=-m20;j<m2;j++)
		{			
			y5=0.3*imageinr[x+i][y+j]+0.59*imageing[x+i][y+j]+0.11*imageinb[x+i][y+j];
			u5=-0.17*imageinr[x+i][y+j]-0.33*imageing[x+i][y+j]+0.5*imageinb[x+i][y+j];
			v5=0.5*imageinr[x+i][y+j]-0.42*imageing[x+i][y+j]-0.08*imageinb[x+i][y+j];

			fi=ABS(y5-y0);
			fs=ABS(sqrt(u5*u5+v5*v5)-sqrt(u0*u0+v0*v0));
			fh=(int)(100*ABS((u5*v0-v5*u0)/(u5*u0+v5*v0)));


			if(fi<30&&fs<15&&fh<10)
			{
				cnt2++;


				imageinr[x+i][y+j]=0;
				imageing[x+i][y+j]=0;
				imageinb[x+i][y+j]=0;

				sx+=i;
				sy+=j;


			}

		}
		
		}

		if(cnt3>0&&i<h-y)
		{
			s+=cnt3;
			cnt3=0;
			m30=MIN(i,w-x);
			m3=MIN(i,x);
			may++;
		for(j=m30;j>-m3;j--)
		{
			


			y5=0.3*imageinr[x+j][y+i]+0.59*imageing[x+j][y+i]+0.11*imageinb[x+j][y+i];
			u5=-0.17*imageinr[x+j][y+i]-0.33*imageing[x+j][y+i]+0.5*imageinb[x+j][y+i];
			v5=0.5*imageinr[x+j][y+i]-0.42*imageing[x+j][y+i]-0.08*imageinb[x+j][y+i];
			fi=ABS(y5-y0);
			fs=ABS(sqrt(u5*u5+v5*v5)-sqrt(u0*u0+v0*v0));
			fh=(int)(100*ABS((u5*v0-v5*u0)/(u5*u0+v5*v0)));


			if(fi<30&&fs<15&&fh<10)
			{
				cnt3++;


				imageinr[x+j][y+i]=0;
				imageing[x+j][y+i]=0;
				imageinb[x+j][y+i]=0;

				sx+=j;
				sy+=i;


			}

		}
		}

		if(cnt4>0&&i<x)
		{
			s+=cnt4;
			cnt4=0;
			m40=MIN(i,y-h);
			m4=MIN(i,y);
			mix++;
		for(j=i;j>-i;j--)
		{			


			y5=0.3*imageinr[x-i][y+j]+0.59*imageing[x-i][y+j]+0.11*imageinb[x-i][y+j];
			u5=-0.17*imageinr[x-i][y+j]-0.33*imageing[x-i][y+j]+0.5*imageinb[x-i][y+j];
			v5=0.5*imageinr[x-i][y+j]-0.42*imageing[x-i][y+j]-0.08*imageinb[x-i][y+j];
			fi=ABS(y5-y0);
			fs=ABS(sqrt(u5*u5+v5*v5)-sqrt(u0*u0+v0*v0));
			fh=(int)(100*ABS((u5*v0-v5*u0)/(u5*u0+v5*v0)));


			if(fi<30&&fs<15&&fh<10)
			{
				cnt4++;


				imageinr[x-i][y+j]=0;
				imageing[x-i][y+j]=0;
				imageinb[x-i][y+j]=0;

				sx+=-i;
				sy+=j;


			}


		}
		}
	}
	s-=4;
	int mm=2*n;
	if(s<1) s=1;
	int xx=sx/s+x;
	int yy=sy/s+y;

	int mh=(miy+may)/2;
	int mw=(mix+max)/2;
	if((mw+xx)>mm) mw=mm-xx;
	else if((xx-mw)<0) mw=xx;
	if((mh+yy)>mm) mh=mm-yy;
	else if((yy-mh)<0) mh=yy;
//	*x_x=xx;
//	*y_y=yy;
	for(i=-mh;i<mh;i++)
		for(j=-mw;j<mw;j++)


			imageinr[j+xx][i+yy]=0;
			imageing[j+xx][i+yy]=255;
			imageinb[j+xx][i+yy]=0;
		}

}

void CColorGrow::GetPoint(BYTE *pbyte, int w, int h, int imager0, int imageg0, int imageb0, DWORD width,DWORD index, int *x, int *y)
{
	double y0,u0,v0,y5,u5,v5;
	double fi,fs,fh;
	double lasti,lasts,lasth;
	int i,j;
	y0=0.3*imager0+0.59*imageg0+0.11*imageb0;
	u0=-0.17*imager0-0.33*imageg0+0.5*imageb0;
	v0=0.5*imager0-0.42*imageg0-0.08*imageb0;

	lasti=lasts=lasth=400;

	for(i=0;i<h;i++)
		{
			BYTE* pbyRsc=pbyte+index;
			for(j=0;j<w;j++)
			{
				BYTE* pbyBlue=pbyRsc++;
				BYTE* pbyGreen=pbyRsc++;
				BYTE* pbyRed=pbyRsc++;
//				pbyRsc++;

				int imageinr=(int)*pbyRed;
				int imageing=(int)*pbyGreen;
				int imageinb=(int)*pbyBlue;
				y5=0.3*imageinr+0.59*imageing+0.11*imageinb;
				u5=-0.17*imageinr-0.33*imageing+0.5*imageinb;
				v5=0.5*imageinr-0.42*imageing-0.08*imageinb;

				fi=ABS(y5-y0);
				fs=ABS(sqrt(u5*u5+v5*v5)-sqrt(u0*u0+v0*v0));
				fh=100.0*ABS((u5*v0-v5*u0)/(u5*u0+v5*v0));


				if(fh<lasth)
				{
					lasth=fh;
					*x=j;
					*y=i;
				}
				else if(fs<lasts||fh<lasth+6)
				{
					lasth=fs;
					*x=j;
					*y=i;
				}
				else if(fi<lasti||fs<lasts+15||fh<lasth+10)
				{
					lasti=fi;
					*x=j;
					*y=i;
				}			
			
			}
			index+=width;
		}

}

⌨️ 快捷键说明

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