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

📄 linux2video.c

📁 用嵌入式linux进行图像处理的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    }	
}

void addbanner(unsigned char * dest,unsigned char * hz_pixel,unsigned char count)
{
    int row,line,i,j;
    int num;
    unsigned char *hz_pixel_tmp;
    hz_pixel_tmp=malloc(48*48*count);

    for(j=(16*count-1);j>-1;j--)
	for(i=0;i<8;i++)
	{
	    if(	(hz_pixel[j]	>>i)&0x01   )
	    {
		hz_pixel_tmp[j*24+3*(8-i)-1]=0xff;
		hz_pixel_tmp[j*24+3*(8-i)-2]=0xff;
		hz_pixel_tmp[j*24+3*(8-i)-3]=0xff;				
	    }
	    else
	    {
		hz_pixel_tmp[j*24+3*(8-i)-1]=0;
		hz_pixel_tmp[j*24+3*(8-i)-2]=0;
		hz_pixel_tmp[j*24+3*(8-i)-3]=0;				
	    }
	}
//	for(i=0;i<768*count;i++)
//		printf("zzz  %x\n",hz_pixel_tmp[i]);

    for(i=0;i<count;i++)
	for(row=0;row<48;row++)
	    for(line=0;line<48;line++)
	    {
		dest[3*(WIDTH_DEFAULT_f*(560+row/3)+16*i)+line]=hz_pixel_tmp[48*48*i+row*48+line];
	    }
    free(hz_pixel_tmp);
}

/*
void addbanner(unsigned char * dest,unsigned char * hz_pixel,unsigned char count)
{
    int row,line,i;
    int num;
    
    for(num=31*count;num>-1;num--)
	for(i=0;i<8;i++)
	{
	    if(	(*(hz_pixel+num)	>>i)&0x1	)
	    {
		*(dest+((WIDTH_DEFAULT_f*((HEIGHT_DEFAULT_f+count*16)-(31*count-num)/2)+384+(8-i)+(num%2)*8)-1)*3)  =BACK_COLOR;
		*(dest+((WIDTH_DEFAULT_f*(HEIGHT_DEFAULT_f-(31-num)/2)+384+(8-i)+(num%2)*8)-1)*3+1)  =BACK_COLOR;
		*(dest+((WIDTH_DEFAULT_f*(HEIGHT_DEFAULT_f-(31-num)/2)+384+(8-i)+(num%2)*8)-1)*3+2)  =BACK_COLOR;		
	    }
	    else
	    {
		*(dest+((WIDTH_DEFAULT_f*(HEIGHT_DEFAULT_f-(31-num)/2)+384+(8-i)+(num%2)*8)-1)*3)  =FRONT_COLOR;
		*(dest+((WIDTH_DEFAULT_f*(HEIGHT_DEFAULT_f-(31-num)/2)+384+(8-i)+(num%2)*8)-1)*3+1)  =FRONT_COLOR;
		*(dest+((WIDTH_DEFAULT_f*(HEIGHT_DEFAULT_f-(31-num)/2)+384+(8-i)+(num%2)*8)-1)*3+2)  =FRONT_COLOR;		
	    }		
	}
}
*/

void compress_to_jpeg_file(FILE *outfile,unsigned  char * image_buffer, int quality)
{
    struct jpeg_compress_struct cinfo;
    struct jpeg_error_mgr jerr;
    JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */
    int row_stride;  /* physical row width in image buffer */
    int image_width;
    int image_height;
    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_compress(&cinfo);
    jpeg_stdio_dest(&cinfo, outfile);
    image_width = WIDTH_DEFAULT_f;
    image_height = HEIGHT_DEFAULT_f;
    cinfo.image_width = image_width;	// image width and height, in pixels
    cinfo.image_height = image_height;
    cinfo.input_components = 3;// # of color components per pixel
    cinfo.in_color_space=JCS_RGB;//JCS_RGB// colorspace of input image JCS_YCbCr
    jpeg_set_defaults(&cinfo);
    jpeg_set_quality(&cinfo, quality,TRUE);	//limit to baseline-JPEG values
    jpeg_start_compress(&cinfo,TRUE);
    row_stride = image_width*3;// JSAMPLEs per row in image_buffer
    while (cinfo.next_scanline<cinfo.image_height)
    {
		row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
		(void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
    }
    jpeg_finish_compress(&cinfo);	
    jpeg_destroy_compress(&cinfo);	
}


void exchange_r_b( char * f,long size)
{
    char r,b;
    long i;
    for( i = 0; i < size ; i++)
    {
	r = *f;
	b = *( f + 2);
	*f = b;
	*(f + 2) = r;
	f = f +3;
    }
}

void exchange_y_CbCr(unsigned char * f,long size)
{
    unsigned char cbcr,y;
    long i;
    for( i = 0; i < size ; i++)
    {
		cbcr= *f;
		y = *( f + 1);
		*f = y;
		*(f + 1) = cbcr;
		//i++;
    }
}
int main (int argc, char *argv[])
{
	FILE * my_file_fd;

	int myfd;
	int fd;
	struct timeval time_start,time_end;

	unsigned char hzpixel[32]={ 0x08,0x80,0x08,0x80,
				    0x08,0x80,0x11,0xfe,
				    0x11,0x02,0x32,0x04,
				    0x54,0x20,0x10,0x20,
				    0x10,0xa8,0x10,0xa4,
				    0x11,0x26,0x12,0x22,
				    0x10,0x20,0x10,0x20,
				    0x10,0xa0,0x10,0x40,

				    0x08,0x80,0x08,0x80,
				    0x08,0x80,0x11,0xfe,
				    0x11,0x02,0x32,0x04,
				    0x54,0x20,0x10,0x20,
				    0x10,0xa8,0x10,0xa4,
				    0x11,0x26,0x12,0x22,
				    0x10,0x20,0x10,0x20,
				    0x10,0xa0,0x10,0x40
	};

int nRead=0;
unsigned int pic_number_count=0;
long pixel_num;
unsigned short * receive_SAA7114_data_yuv;

u16 * receive_SAA7114_data_rgb;
//////////////////////////////////////////////////////////////////////////
//----------serial define----------------------
int ret,portno,nWritten_8031;
int nWrite=0;
//----------serial define end------------------
//////////////////////////////////////////////////////////////////////////
long i;
/*variable for pic buf_to_8031 */
////////////////////////////////////////////////////////////////////////

printf("\n--------------------------------------------------------\n");
printf("------------Mode: dian zhi jin cha  Ver:1.0.0 -------------\n");
printf("--------------------------------------------------------\n");

/////////////////////////////////////////////////////////
//connect to MCU and set date
portno=0;
ret=OpenCom(portno,"/dev/ttyS1",115200);
if(ret==-1)
{
    perror("!!ERROR/dev/ttyS1");
    exit(1);
}
else printf("OK open ttyS 1\n");

do
{
    nWritten_8031=ComWrt(portno,"gt",2);	
    fflush(stdout);		//更新缓冲区,将数据写入stdout
    nRead=ComRd(0,buf_to_8031,12,3000);	
    if(nRead>0)
    {
	    printf("Get time  time is %s\n",buf_to_8031);
    }
    else printf("!!mcu Timeout\n");
    
}while(nRead==0);

//printf("Time  is  %s\n",buf_to_8031);

if(fork()==0)if(execl("/bin/date","date","-s",buf_to_8031,NULL)==-1)perror("ERROR STIME\n\n");
print_currenttime();		
//--------set date finished

chdir("/hd/");

//////////////////////..2   //////////////////////////////////////////
//print configuration table
printf("\n########## CURRENTLY SCHEME TABLE ##############\n");//打印配置表

printf("\n###############################################\n");
//------------------------------------------------------------------

pixel_num=HEIGHT_DEFAULT_f*WIDTH_DEFAULT_f;

if((myfd=open(MYDRV_DEV,O_RDWR | O_NONBLOCK))<0)    perror("!!ERROR opening video");


//	printf("\n\n%d\n\n",sizeof(unsigned short));
//	printf("\n\n%d\n\n",sizeof(int));
//		printf("\n\n%d\n\n",sizeof(char));


receive_SAA7114_data_yuv=malloc(pixel_num*3);
memset(receive_SAA7114_data_yuv,0,pixel_num*3);

receive_SAA7114_data_rgb=malloc(pixel_num*3);
memset(receive_SAA7114_data_rgb,0,pixel_num*3);

while(1)
{
    nRead=ComRd(0,info_from_mcu,2,3000);
    if(nRead>0)
    {
		for(i=0;i<pixel_num;i++)
		{
	    	read(myfd,(receive_SAA7114_data_yuv+i),2);
		}
		nWritten_8031=ComWrt(portno,"1",1);//接受完数据后通知单片机
		printf("\n==== routeway %x ====\n",*info_from_mcu);

		exchange_y_CbCr(receive_SAA7114_data_yuv,pixel_num);//交换y与cbcr的位置
		if(v4l_yuv422p2rgb(receive_SAA7114_data_rgb,receive_SAA7114_data_yuv,WIDTH_DEFAULT_f,HEIGHT_DEFAULT_f,24)<0)
			printf("\n\n!!!error v4l_yuv422p2rgb\n\n");//yuv转RGB
		//exchange_r_b(receive_SAA7114_data_rgb,pixel_num);
	
	printf("myNV10 -> %x.jpg...\n",pic_number_count);
	sprintf(sendPicFilename_compress,"%x.jpg",pic_number_count);
	pic_number_count++;//文件名计数器加1
	my_file_fd=fopen(sendPicFilename_compress,"w+");//创建这个文件
	if(my_file_fd==NULL)perror("!!error creat");

	compress_to_jpeg_file(my_file_fd,receive_SAA7114_data_rgb,JIMAGEQUALITY);
//	fwrite(receive_SAA7114_data_yuv,2,pixel_num,my_file_fd);
	
	fclose(my_file_fd);

	if(init_eth()==1)
	{
		send_picfile(sendPicFilename_compress,1,88);//车道,速度				
	}
    }
}
}

⌨️ 快捷键说明

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