图像叠加时指针越界不知为何
我在做一个图像平滑程序,也就是采集用户指定的iFrameNum帧图像后,把这些图像对应点像素值相加再平均,原理很简单,但是执行出来却出现了“Unhandled exception in test.EXE:0xC0000005:Access Violation ”的错误,网上有人说是指针越界,我觉得也是。但就是不知如何修改,问题估计出在倒数第二个for循环内,由于要进行相加操作,lpframe指向的缓存是8位的,所以将lpbuf所指向的存放像素和的内容设置成16位的,所以该for循环有个强制类型转换“(WORD)”。(注:图像大小为768*576,3色)调试时,iFrameNum 设置成1,j能循环到107320,报错;iFrameNum 设置成2~7,j能循环到14224,报错;iFrameNum 设置成8及以上,j不能循环,报错 望各位能花几分钟时间看一下小弟的问题,谢谢
int iFrameNum = dlg.m_camerainput;//获取用户指定的平均帧数
long size=10*(1 < <20);
LPWORD lpbuf; //双字节内存指针
lpbuf=(LPWORD)GlobalAlloc(GPTR,size);//分配内存
LPBYTE lpframe[20];//创建20帧缓存帧指针
okCaptureTo(hBoard,BUFFER,0,iFrameNum);//采集iFrameNum帧
for(int i=0;i <iFrameNum;i++)
{
lpframe[i]=(LPBYTE)okGetTargetInfo(hBoard,BUFFER,i,wid,ht,NULL);//取第iFrameNum帧首地址
}
for(int j=0;j <768*576*3;j++)//iFrameNum帧对应像素相加平均
{
*(lpbuf+j)=(WORD)*(lpframe[0]+j);
for(int i=1;i <iFrameNum;i++)
*(lpbuf+j)+=(WORD)*(lpframe[i]+j);
}
for(j=0;j <768*576*3;j++)
{
*(lpbuf+j)/=iFrameNum;
*(lpbuf+j)=(BYTE)*(lpbuf+j);
}