谁做过差分算法求背景的程序啊,请高手帮忙。
最近要写一个程序。有六十帧图像,是公路交通的。要把上面的车子去掉,求出背景图。。。。。大概的算法知道,是用差分算法。但是不知道图像怎么调用来求和。。。。。。。。要是谁有这种例子就最好了。谢谢了。。。。 那写程序的时候位图文件头和位图信息头。。。。。。不会要写六十次吧?
另外我估计这个程序的大概框架是
一,位图文件头+位图信息头+调色板(这里要不要调用中断?六十帧要写几次这部分的内容?)
二,貌似图片是分r g b 三个值?六十帧的三个值分开相加????????然后相除?(六十帧图像的rgb值怎么存储调用?)
三,输出结果的图像
打开多个图片。。。。。感觉要用循环。。。。。。这个算法实在是不会。。。。。。
目前我的源程序是如下
#include <stdio.h>
#include <dos.h>
#include <ctype.h>
typedef unsigned char word;
typedef unsigned long dword;
typedef unsigned char byte;
unsigned char set_SVGA_mode(int vmode) //BIOS中断调用
{union REGS r;
r.h.ah=0;
r.h.al=vmode;
int86(0x10,&r,&r);
return(0);
}
unsigned int get_SVGA_mode() //BIOS中断调用
{union REGS r;
r.h.ah=0x0f;
int86(0x10,&r,&r);
return(r.h.al);
}
#pragma pack(push, 2) // 将当前的对齐方式压栈,设置对齐方式为2
typedef struct tagBITMAPFILEHEADER //位图文件信息头
{word bftype[0x424d];
dword bfsize;
word bfreserved1;
word bfreserved2;
dword bf0ffbits;
}BITMAPFILEHEADER;
#pragma pack(pop) // 恢复之前的对齐方式
#define FILEHEADSIZE 14
typedef struct tagBITMAPINFOHEADER //位图信息头
{dword bisize;
long biwidth;
long biheight;
word biplanes;
word bibitcount;
dword biconpression;
dword bisizeimage;
long bixpelspermeter;
long biypelspermeter;
dword biclrused;
dword biclrimportant;
}BITMAPINFOHEADER;
#define INFOHEADSIZE 40
typedef struct tagRGBQUAD //调色板
{byte rgbBLUE;
byte rgbGreen;
byte rgbRed;
byte rgbReserved;
}RGBQUAD;
long int Width; //全局变量
long int Height;
long int Newwidth;
long int Newheight;
long int BitCount;
int Planes;
long int Compression;
long int OffBits;
long int ColorMap;
long int BytesPerLine;
long int CharsPerLine;
int ColorNum;
int loadBMPhead(char *file) //读取像素RGB值并求和求平均(求背景)
{
BITMAPFILEHEADER filehead;
BITMAPINFOHEADER infohead;
FILE * fp;
char data[1024];
int BytesPerLine;
fp=fopen("F:\tc3.1\BIN\bmp\\001.bmp","rb");
fread(&filehead,sizeof(BITMAPFILEHEADER),1,fp);
fread(&infohead,sizeof(BITMAPINFOHEADER),1,fp);
BytesPerLine=(infohead.bibitcount*infohead.biwidth+31)/32*4;
fseek(fp,54,SEEK_SET);
for(int i=infohead.biheight-1;i>=0;i--){
fread(data,1,BytesPerLine,fp);
char Color[1300][3];
for(int k=0;k <infohead.biwidth*3;k++){
if(k%3==2){
Color[k/3][2]=data[k-2];//b
Color[k/3][1]=data[k-1];//g
Color[k/3][0]=data[k-0];//r
}
}
// for(int k=0;k <infohead.biwidth;k++)
//setPixelV(hdc,k+10,i+10,RGB(Color[k][0],Color[k][1],Color[k][2]));
}
int loadBMPcar() //用一帧图像和上面求出来的背景分割出车辆图像
{
}
main() //将求出来的RGB值反算成BMP图像,输出
{
}