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

📄 icetek-dm642-pci.c

📁 DM642上进行帧积累的程序 适用于夜间图像处理
💻 C
字号:
#include "math.h"
#include "stdio.h"
#include "ICETEK-DM642-PCI.h"


//工作变量
unsigned char m_dbFrameY[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbFrameU[SIMGWIDTH1*SIMGHEIGHT1];
unsigned char m_dbFrameV[SIMGWIDTH1*SIMGHEIGHT1];
unsigned char m_dbTargetImageR[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbTargetImageG[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbTargetImageB[SIMGWIDTH*SIMGHEIGHT];
unsigned int m_uVideoStatus,m_bFreeze,m_bSave;
unsigned char headerImage[54];

//unsigned char nMemTemp[720];
unsigned char m_dbFrameYz1[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbFrameYz2[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbFrameYz3[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbFrameYz4[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbFrameYz5[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbFrameYz6[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbFrameYz7[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbFrameYz8[SIMGWIDTH*SIMGHEIGHT];
unsigned char m_dbFrameYz9[SIMGWIDTH*SIMGHEIGHT];
void ICETEKDM642PCIImageProcessReverse()
{
	int i;
	int j;
	// 取反
	for (j=0;i<575;j++)
	for ( i=0;i<720;i++ )
	{
    	m_dbFrameY[i+j*720]=~m_dbFrameY[i+j*720];
    	//nMemTemp[i]=~nMemTemp[i];
    	//	if(nMemTemp[i]>255)
		//nMemTemp[i]=255;
		
	}
  for (j=0;i<575;j++)
	for ( i=0;i<360;i++ )
	{
    	m_dbFrameU[i+j*360]=0x080;
    	//nMemTemp[i]=~nMemTemp[i];
    	//	if(nMemTemp[i]>255)
		//nMemTemp[i]=255;
		
	}
  for (j=0;i<575;j++)
	for ( i=0;i<360;i++ )
	{
    	m_dbFrameV[i+j*360]=0x080;
    	//nMemTemp[i]=~nMemTemp[i];
    	//	if(nMemTemp[i]>255)
		//nMemTemp[i]=255;
		
	}
}



void ICETEKDM642PCIBoardInit()
{
	m_uVideoStatus=m_bFreeze=m_bSave=0;
}

void ICETEKDM642PCIYUVRGB()
{
	int i,j;
	int r,g,b,y,u,v;
	unsigned char *py,*pu,*pv,*pr,*pg,*pb;
	
	py=m_dbFrameY; pu=m_dbFrameU; pv=m_dbFrameV;
	pr=m_dbTargetImageR; pg=m_dbTargetImageG; pb=m_dbTargetImageB;
	for ( i=0;i<SIMGHEIGHT;i++ )   
	{  
		for ( j=0;j<SIMGWIDTH;j+=2 )   //列720点,360个32bit,
		{
			u=(*pu); v=(*pv); y=(*py);
			u-=128; v-=128;
			r=y+1.402*u;
			g=y-0.34414*u-0.71414*v;
			b=y+1.772*v;
			if ( r>255 )	r=255;
			else if ( r<0 )	r=0;
			if ( g>255 )	g=255;
			else if ( g<0 )	g=0;
			if ( b>255 )	b=255;
			else if ( b<0 )	b=0;
			(*pr)=r; pr++;
			(*pg)=g; pg++;
			(*pb)=b; pb++;
			py++; y=(*py);
			r=y+1.402*u;
			g=y-0.34414*u-0.71414*v;
			b=y+1.772*v;
			if ( r>255 )	r=255;
			else if ( r<0 )	r=0;
			if ( g>255 )	g=255;
			else if ( g<0 )	g=0;
			if ( b>255 )	b=255;
			else if ( b<0 )	b=0;
			(*pr)=r; pr++;
			(*pg)=g; pg++;
			(*pb)=b; pb++;
			py++; pu++; pv++;
		}
    }
	SaveToBMP();
}

void SaveToBMP()
{
	FILE *fp;
	unsigned char *pRGB,*pr,*pg,*pb,*pR,*pG,*pB;
	int j,i;
	unsigned int *pk;
	
	pRGB=(unsigned char *)headerImage;
	for ( i=0;i<54;i++,pRGB++ )	(*pRGB)=0;
	pRGB=(unsigned char *)headerImage;
	(*pRGB)=0x42; pRGB++;	// BM
	(*pRGB)=0x4d; pRGB++;
	pRGB+=2;
	pk=(unsigned int *)pRGB; (*pk)=14+40+180*144*3;	// size
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=0;	// reserved
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=54;	// image offset
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=40;	// struct size
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=720;	// width
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=576;	// height
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=0x180001;	// Planes & BitCount
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=0;	// Compression
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=720*576*3;	// image size
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=3780;	// x pixels/m
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=3780;	// y pixels/m
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=0;	// color used
	pRGB+=4;
	pk=(unsigned int *)pRGB; (*pk)=0;	// important color
	if ( fp=fopen("Video.bmp","wb+") )
	{
		printf("Create a file named Video.bmp\n");
		pRGB=headerImage;
		fwrite(pRGB,2,1,fp);
		fwrite(pRGB+4,52,1,fp);
		pR=m_dbTargetImageR+720*575;
		pG=m_dbTargetImageG+720*575;
		pB=m_dbTargetImageB+720*575;
		printf("Saving image data...\n");
		for ( j=0;j<576;j++ )
		{
			pr=pR; pg=pG; pb=pB;
			for ( i=0;i<720;i++,pr++,pg++,pb++ )
			{
				fwrite(pb,1,1,fp);
				fwrite(pg,1,1,fp);
				fwrite(pr,1,1,fp);
			}
			pR-=720;
			pG-=720;
			pB-=720;
			if ( j%57==0 )
				printf("  completed %d%%\n",j/57*10);
		}
		fclose(fp);
		printf("Finished.\n");
	}
}

⌨️ 快捷键说明

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