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

📄 image.c

📁 嵌入式系统中DSP642包括摄像头图像采集、显示单元LCD显示图像的主程序
💻 C
字号:
#include "image.h"

#define Point(x,y) lpPoints[(x)+(y)*nWidth]
#define Point1(x,y) lpPoints1[(x)+(y)*nWidth]

#define qvga(y,x) p_qvga[(y)*320+(x)]
#define qvga_r(y,x) qvga_r[(y)*320+(x)]
#define qvga_g(y,x) qvga_g[(y)*320+(x)]
#define qvga_b(y,x) qvga_b[(y)*320+(x)]

#define uxga(y,x) p_uxga[(y)*1600+(x)]


#define svga_y(y,x) svga_y[(y)*800+(x)]
#define svga_Cb(y,x) svga_Cb[(y)*400+(x)]
#define svga_Cr(y,x) svga_Cr[(y)*400+(x)]
//#define nWidth=640
//#define nHeight=480

void Sobel()
{  
	int nWidth=640;
	int nHeight=480;
	int x,y,x1,y1,i;
	volatile Uint8 *lpPoints=(volatile Uint8 *)(0x80000000);
	volatile Uint8 *lpPoints1=(volatile Uint8 *)(0x80100000);

	int d,max;
  	static int s[8][9]={
		{-1,-2,-1,0,0,0,1,2,1},
		{0,-1,-2,1,0,-1,2,1,0},
		{1,0,-1,2,0,-2,1,0,-1},
		{2,1,0,1,0,-1,0,-1,-2},
		{1,2,1,0,0,0,-1,-2,-1},
		{0,1,2,-1,0,1,-2,-1,0},
		{-1,0,1,-2,0,2,-1,0,1},
		{-2,-1,0,-1,0,1,0,1,2}
	};
	for(y=1;y<nHeight-1;y++)
	{
		for(x=1;x<nWidth-1;x++)
		{
			max=0;
			for(i=0;i<8;i++)
			{
				d=0;
				for(y1=0;y1<3;y1++)
				for(x1=0;x1<3;x1++)
				{
					d+=s[i][x1+y1*3]*Point(x+x1-1,y+y1-1);
				}
				if (d>max) max=d;
			}
			if (max>255) max=255;
			Point1(x,y)=(Uint8)max;
		}
	}
}


void SVGA2QVGA_BW(volatile Uint8 *svga_y,
				  volatile Uint8 *qvga_r,volatile Uint8 *qvga_g,volatile Uint8 *qvga_b,Uint8 zoom)
{
	Uint16 i,j;

	if(zoom==0)	
	{
		for (i=0;i<120;i++)
		{
			for(j=0;j<160;j++)
			{								    
				qvga_r(2*i,2*j)=svga_y(i*5+1,j*5+1);
				qvga_r(2*i+1,2*j)=svga_y(i*5+3,j*5+1);
				qvga_r(2*i,2*j+1)=svga_y(i*5+1,j*5+3);
				qvga_r(2*i+1,2*j+1)=svga_y(i*5+3,j*5+3);

				qvga_g(2*i,2*j)=svga_y(i*5+1,j*5+1);
				qvga_g(2*i+1,2*j)=svga_y(i*5+3,j*5+1);
				qvga_g(2*i,2*j+1)=svga_y(i*5+1,j*5+3);
				qvga_g(2*i+1,2*j+1)=svga_y(i*5+3,j*5+3);
				
				qvga_b(2*i,2*j)=svga_y(i*5+1,j*5+1);
				qvga_b(2*i+1,2*j)=svga_y(i*5+3,j*5+1);
				qvga_b(2*i,2*j+1)=svga_y(i*5+1,j*5+3);
				qvga_b(2*i+1,2*j+1)=svga_y(i*5+3,j*5+3);		
			}
		}
	}

	else if(zoom==1)	
	{
		for (i=0;i<240;i++)
		{
			for(j=0;j<320;j++)
			{												
				qvga_r(i,j)=svga_y(i+180,j+240);
				qvga_g(i,j)=svga_y(i+180,j+240);
				qvga_b(i,j)=svga_y(i+180,j+240);
			}
		}
	}
}

/*void SVGA2QVGA(volatile Uint8 *p_svga,volatile Uint8 *p_qvga,Uint8 zoom)
{
	Uint16 i,j;

	if(zoom==0)	
	{
		for (i=0;i<120;i++)
		{
			for(j=0;j<160;j++)
			{								    
				qvga(2*i,2*j)=svga(i*5+1,j*5+1);
				qvga(2*i+1,2*j)=svga(i*5+3,j*5+1);
				qvga(2*i,2*j+1)=svga(i*5+1,j*5+3);
				qvga(2*i+1,2*j+1)=svga(i*5+3,j*5+3);		
			}
		}
	}

	else if(zoom==1)	
	{
		for (i=0;i<240;i++)
		{
			for(j=0;j<320;j++)
			{												
				qvga(i,j)=svga(i+180,j+240);
			}
		}
	}
}*/

void SVGA2QVGA_RGB(volatile Uint8 *svga_y,volatile Uint8 *svga_Cb,volatile Uint8 *svga_Cr, 
                   volatile Uint8 *qvga_r, volatile Uint8 *qvga_g,volatile Uint8 *qvga_b,
                   Uint8 zoom)
{
	Uint16 i,j;
//	int data;
	if(zoom==0)
	{
	for (i=0;i<120;i++)
	{
		for (j=0;j<80;j++)
		{
/*			data =  svga_y(5*i+1,10*j+1)+((351*(svga_Cr(5*i+1,5*j)-128))>>8);
			if(data>0xff) qvga_r(2*i,4*j)=0xff;
			else if(data<0) qvga_r(2*i,4*j)=0;
			else qvga_r(2*i,4*j)=data;

			data= svga_y(5*i+1,10*j+3)+((351*(svga_Cr(5*i+1,5*j+1)-128))>>8);
			if(data>0xff) qvga_r(2*i,4*j+1)=0xff;
			else if(data<0) qvga_r(2*i,4*j+1)=0;
			else qvga_r(2*i,4*j+1)=data;

			data = svga_y(5*i+1,10*j+6)+((351*(svga_Cr(5*i+1,5*j+3)-128))>>8);
			if(data>0xff) qvga_r(2*i,4*j+2)=0xff;
			else if(data<0) qvga_r(2*i,4*j+2)=0;
			else qvga_r(2*i,4*j+2)=data;

			data = svga_y(5*i+1,10*j+8)+((351*(svga_Cr(5*i+1,5*j+4)-128))>>8);
			if(data>0xff) qvga_r(2*i,4*j+3)=0xff;
			else if(data<0) qvga_r(2*i,4*j+3)=0;
			else qvga_r(2*i,4*j+3)=data;

			data =  svga_y(5*i+3,10*j+1)+((351*(svga_Cr(5*i+3,5*j)-128))>>8);
			if(data>0xff) qvga_r(2*i+1,4*j)=0xff;
			else if(data<0) qvga_r(2*i+1,4*j)=0;
			else qvga_r(2*i+1,4*j)=data;

			data = svga_y(5*i+3,10*j+3)+((351*(svga_Cr(5*i+3,5*j+1)-128))>>8);
			if(data>0xff) qvga_r(2*i+1,4*j+1)=0xff;
			else if(data<0) qvga_r(2*i+1,4*j+1)=0;
			else qvga_r(2*i+1,4*j+1)=data;

			data= svga_y(5*i+3,10*j+6)+((351*(svga_Cr(5*i+3,5*j+3)-128))>>8);
			if(data>0xff) qvga_r(2*i+1,4*j+2)=0xff;
			else if(data<0) qvga_r(2*i+1,4*j+2)=0;
			else qvga_r(2*i+1,4*j+2)=data;

			data= svga_y(5*i+3,10*j+8)+((351*(svga_Cr(5*i+3,5*j+4)-128))>>8);
			if(data>0xff) qvga_r(2*i+1,4*j+3)=0xff;
			else if(data<0) qvga_r(2*i+1,4*j+3)=0;
			else qvga_r(2*i+1,4*j+3)=data;
			

			data =  svga_y(5*i+1,10*j+1)-((179*(svga_Cr(5*i+1,5*j)-128)+86*(svga_Cb(5*i+1,5*j)-128))>>8);
			if (data>0xff) qvga_g(2*i,4*j)=0xff;
			else if (data<0) qvga_g(2*i,4*j)=0;
			else  qvga_g(2*i,4*j)=data;

			data = svga_y(5*i+1,10*j+3)-((179*(svga_Cr(5*i+1,5*j+1)-128)+86*(svga_Cb(5*i+1,5*j+1)-128))>>8);
			if(data>0xff) qvga_g(2*i,4*j+1)=0xff;
			else if(data<0) qvga_g(2*i,4*j+1)=0;
			else qvga_g(2*i,4*j+1)=data;

			data= svga_y(5*i+1,10*j+6)-((179*(svga_Cr(5*i+1,5*j+3)-128)+86*(svga_Cb(5*i+1,5*j+3)-128))>>8);
			if(data>0xff) qvga_g(2*i,4*j+2)=0xff;
			else if(data<0) qvga_g(2*i,4*j+2)=0;
			else qvga_g(2*i,4*j+2)=data;

			data= svga_y(5*i+1,10*j+8)-((179*(svga_Cr(5*i+1,5*j+4)-128)+86*(svga_Cb(5*i+1,5*j+4)-128))>>8);
			if(data>0xff) qvga_g(2*i,4*j+3)=0xff;
			else if(data<0) qvga_g(2*i,4*j+3)=0;
			else qvga_g(2*i,4*j+3)=data;

			data = svga_y(5*i+3,10*j+1)-((179*(svga_Cr(5*i+3,5*j)-128)+86*(svga_Cb(5*i+3,5*j)-128))>>8);
			if(data>0xff) qvga_g(2*i+1,4*j)=0xff;
			else if(data<0) qvga_g(2*i+1,4*j)=0;
			else qvga_g(2*i+1,4*j)=data;

			data = svga_y(5*i+3,10*j+3)-((179*(svga_Cr(5*i+3,5*j+1)-128)+86*(svga_Cb(5*i+3,5*j+1)-128))>>8);
			if(data>0xff) qvga_g(2*i+1,4*j+1)=0xff;
			else if(data<0) qvga_g(2*i+1,4*j+1)=0;
			else qvga_g(2*i+1,4*j+1)=data;

			data= svga_y(5*i+3,10*j+6)-((179*(svga_Cr(5*i+3,5*j+3)-128)+86*(svga_Cb(5*i+3,5*j+3)-128))>>8);
			if(data>0xff) qvga_g(2*i+1,4*j+2)=0xff;
			else if(data<0) qvga_g(2*i+1,4*j+2)=0;
			else qvga_g(2*i+1,4*j+2)=data;

			data= svga_y(5*i+3,10*j+8)-((179*(svga_Cr(5*i+3,5*j+4)-128)+86*(svga_Cb(5*i+3,5*j+4)-128))>>8);
			if (data>0xff) qvga_g(2*i+1,4*j+3)=0xff;
			else if(data<0) qvga_g(2*i+1,4*j+3)=0;
			else qvga_g(2*i+1,4*j+3)=data;


			data =  svga_y(5*i+1,10*j+1)+((443*(svga_Cb(5*i+1,5*j)-128))>>8);
			if(data>0xff) qvga_b(2*i,4*j)=0xff;
			else if(data<0) qvga_b(2*i,4*j)=0;
			else qvga_b(2*i,4*j)=data;

			data= svga_y(5*i+1,10*j+3)+((443*(svga_Cb(5*i+1,5*j+1)-128))>>8);
			if(data>0xff) qvga_b(2*i,4*j+1)=0xff;
			else if(data<0) qvga_b(2*i,4*j+1)=0;
			else qvga_b(2*i,4*j+1)=data;

			data= svga_y(5*i+1,10*j+6)+((443*(svga_Cb(5*i+1,5*j+3)-128))>>8);
			if(data>0xff) 	qvga_b(2*i,4*j+2)=0xff;
			else if (data<0) 	qvga_b(2*i,4*j+2)=0;
			else 	qvga_b(2*i,4*j+2)=data;

			data= svga_y(5*i+1,10*j+8)+((443*(svga_Cb(5*i+1,5*j+4)-128))>>8);
			if(data>0xff) qvga_b(2*i,4*j+3)=0xff;
			else if(data<0) qvga_b(2*i,4*j+3)=0;
			else qvga_b(2*i,4*j+3)=data;

			data =  svga_y(5*i+3,10*j+1)+((443*(svga_Cb(5*i+3,5*j)-128))>>8);
			if(data>0xff) qvga_b(2*i+1,4*j)=0xff;
			else if(data<0) qvga_b(2*i+1,4*j)=0;
			else qvga_b(2*i+1,4*j)=data;

			data= svga_y(5*i+3,10*j+3)+((443*(svga_Cb(5*i+3,5*j+1)-128))>>8);
			if(data>0xff) qvga_b(2*i+1,4*j+1)=0xff;
			else if(data<0) qvga_b(2*i+1,4*j+1)=0;
			else qvga_b(2*i+1,4*j+1)=data;

			data= svga_y(5*i+3,10*j+6)+((443*(svga_Cb(5*i+3,5*j+3)-128))>>8);
			if(data>0xff) qvga_b(2*i+1,4*j+2)=0xff;
			else if(data<0) qvga_b(2*i+1,4*j+2)=0;
			else qvga_b(2*i+1,4*j+2)=data;

			data= svga_y(5*i+3,10*j+8)+((443*(svga_Cb(5*i+3,5*j+4)-128))>>8);
			if(data>0xff) qvga_b(2*i+1,4*j+3)=0xff;
			else if(data<0) qvga_b(2*i+1,4*j+3)=0;
			else qvga_b(2*i+1,4*j+3)=data;*/

			qvga_r(2*i,4*j) =  ADJPIXEL(svga_y(5*i+1,10*j+1)+((351*(svga_Cr(5*i+1,5*j)-128))>>8));
			qvga_r(2*i,4*j+1)= ADJPIXEL(svga_y(5*i+1,10*j+3)+((351*(svga_Cr(5*i+1,5*j+1)-128))>>8));
			qvga_r(2*i,4*j+2) = ADJPIXEL(svga_y(5*i+1,10*j+6)+((351*(svga_Cr(5*i+1,5*j+3)-128))>>8));
			qvga_r(2*i,4*j+3) = ADJPIXEL(svga_y(5*i+1,10*j+8)+((351*(svga_Cr(5*i+1,5*j+4)-128))>>8));
			qvga_r(2*i+1,4*j) = ADJPIXEL(svga_y(5*i+3,10*j+1)+((351*(svga_Cr(5*i+3,5*j)-128))>>8));
			qvga_r(2*i+1,4*j+1) = ADJPIXEL(svga_y(5*i+3,10*j+3)+((351*(svga_Cr(5*i+3,5*j+1)-128))>>8));
			qvga_r(2*i+1,4*j+2)= ADJPIXEL(svga_y(5*i+3,10*j+6)+((351*(svga_Cr(5*i+3,5*j+3)-128))>>8));
			qvga_r(2*i+1,4*j+3)= ADJPIXEL(svga_y(5*i+3,10*j+8)+((351*(svga_Cr(5*i+3,5*j+4)-128))>>8));
			
			qvga_g(2*i,4*j) = ADJPIXEL(svga_y(5*i+1,10*j+1)-((179*(svga_Cr(5*i+1,5*j)-128)+86*(svga_Cb(5*i+1,5*j)-128))>>8));
			qvga_g(2*i,4*j+1) = ADJPIXEL(svga_y(5*i+1,10*j+3)-((179*(svga_Cr(5*i+1,5*j+1)-128)+86*(svga_Cb(5*i+1,5*j+1)-128))>>8));
			qvga_g(2*i,4*j+2)= ADJPIXEL(svga_y(5*i+1,10*j+6)-((179*(svga_Cr(5*i+1,5*j+3)-128)+86*(svga_Cb(5*i+1,5*j+3)-128))>>8));
			qvga_g(2*i,4*j+3)= ADJPIXEL(svga_y(5*i+1,10*j+8)-((179*(svga_Cr(5*i+1,5*j+4)-128)+86*(svga_Cb(5*i+1,5*j+4)-128))>>8));
			qvga_g(2*i+1,4*j) = ADJPIXEL(svga_y(5*i+3,10*j+1)-((179*(svga_Cr(5*i+3,5*j)-128)+86*(svga_Cb(5*i+3,5*j)-128))>>8));
			qvga_g(2*i+1,4*j+1) =ADJPIXEL(svga_y(5*i+3,10*j+3)-((179*(svga_Cr(5*i+3,5*j+1)-128)+86*(svga_Cb(5*i+3,5*j+1)-128))>>8));
			qvga_g(2*i+1,4*j+2)= ADJPIXEL(svga_y(5*i+3,10*j+6)-((179*(svga_Cr(5*i+3,5*j+3)-128)+86*(svga_Cb(5*i+3,5*j+3)-128))>>8));
			qvga_g(2*i+1,4*j+3)= ADJPIXEL(svga_y(5*i+3,10*j+8)-((179*(svga_Cr(5*i+3,5*j+4)-128)+86*(svga_Cb(5*i+3,5*j+4)-128))>>8));

			qvga_b(2*i,4*j) = ADJPIXEL(svga_y(5*i+1,10*j+1)+((443*(svga_Cb(5*i+1,5*j)-128))>>8));
			qvga_b(2*i,4*j+1)= ADJPIXEL(svga_y(5*i+1,10*j+3)+((443*(svga_Cb(5*i+1,5*j+1)-128))>>8));
			qvga_b(2*i,4*j+2)= ADJPIXEL(svga_y(5*i+1,10*j+6)+((443*(svga_Cb(5*i+1,5*j+3)-128))>>8));
			qvga_b(2*i,4*j+3)= ADJPIXEL(svga_y(5*i+1,10*j+8)+((443*(svga_Cb(5*i+1,5*j+4)-128))>>8));
			qvga_b(2*i+1,4*j) = ADJPIXEL(svga_y(5*i+3,10*j+1)+((443*(svga_Cb(5*i+3,5*j)-128))>>8));
			qvga_b(2*i+1,4*j+1)= ADJPIXEL(svga_y(5*i+3,10*j+3)+((443*(svga_Cb(5*i+3,5*j+1)-128))>>8));
			qvga_b(2*i+1,4*j+2)= ADJPIXEL(svga_y(5*i+3,10*j+6)+((443*(svga_Cb(5*i+3,5*j+3)-128))>>8));
			qvga_b(2*i+1,4*j+3)= ADJPIXEL(svga_y(5*i+3,10*j+8)+((443*(svga_Cb(5*i+3,5*j+4)-128))>>8));		
		}
	}
	}

	else if(zoom==1)
	{
		for(i=0;i<240;i++)
		{
			for(j=0;j<160;j++)
			{	
				qvga_r(i,2*j) =  ADJPIXEL(svga_y(i+180,2*j+240)+((351*(svga_Cr(i+180,j+120)-128))>>8));
				qvga_r(i,2*j+1) =  ADJPIXEL(svga_y(i+180,2*j+241)+((351*(svga_Cr(i+180,j+120)-128))>>8));
			
				qvga_g(i,2*j) = ADJPIXEL(svga_y(i+180,2*j+240)-((179*(svga_Cr(i+180,j+120)-128)+86*(svga_Cb(i+180,j+120)-128))>>8));			
				qvga_g(i,2*j+1) = ADJPIXEL(svga_y(i+180,2*j+241)-((179*(svga_Cr(i+180,j+120)-128)+86*(svga_Cb(i+180,j+120)-128))>>8));	
				
				qvga_b(i,2*j) = ADJPIXEL(svga_y(i+180,2*j+240)+((443*(svga_Cb(i+180,j+120)-128))>>8));							
				qvga_b(i,2*j+1) = ADJPIXEL(svga_y(i+180,2*j+241)+((443*(svga_Cb(i+180,j+120)-128))>>8));
			}
		}
	}
}

Uint8 ADJPIXEL(int pixel)
{
	Uint8 data;

	if(pixel>0xff) data=0xff;

	else if(pixel<0) data=0;

	else data=pixel;

	return data;
}


void UXGA2QVGA(volatile Uint8 *p_uxga,volatile Uint8 *p_qvga,Uint8 zoom)
{
	Uint16 i,j;
	if(zoom==0)
	{
		for (i=0;i<240;i++)
		{
			for(j=0;j<320;j++)
			{
			    qvga(i,j)=uxga(i*5+2,j*5+2);
			}
		}
	}
	else if(zoom==1)
	{
		for (i=0;i<240;i++)
		{
			for(j=0;j<320;j++)
			{
				qvga(i,j)=uxga(i+480,j+640);
			}
		}
	}
}

⌨️ 快捷键说明

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