cvCreateImage老是报内存读写错误

cczu_yan 2013-03-06 04:00:13
for(int i = 1; i <= ConfigureDlg.m_capcount; i++ )
{
CString buffer,temp1,temp2,filename;//读取源图像
int t = pDlg->count++;
buffer.Format ("image_%02d.bmp", t);
temp1 = pDlg->m_path.Left(2);
temp2 = pDlg->m_path.Right(5);
filename = temp1 + "\\\\" + temp2 + "\\\\" + buffer;
IplImage* pSrc = cvLoadImage(filename,CV_LOAD_IMAGE_GRAYSCALE);//读入图像强制转换为单通道图
for(int j = 1; j <= ConfigureDlg.m_row; j++ )
{
IplImage* pNewImage = cvCreateImage(cvSize(4096,1),IPL_DEPTH_8U,1);//创建一个单通道的图像
uchar* data0;
uchar* data1;
data0 = (uchar*)pSrc->imageData;
data1 = (uchar*)pNewImage->imageData;
for(int k = 1; k <= 4096; k++)
{
data1[(j-1)*pSrc->widthStep + k] = data0[(j-1)*pSrc->widthStep + k];
}

/*------------------------------*/
IplImage* pResizeImage = cvCreateImage(cvSize(4096,256),IPL_DEPTH_8U,1);
pResizeImage = pDlg->ResizeImage(256,pNewImage);//图像的放大

//放大后图像的保存
CString filename,temp1,temp2,temp3;
int i = pDlg->ImageCount++;
temp1.Format(_T("%d"),i);
int s;//路径的尺寸
s = pDlg->m_ResizePath.GetLength();
temp2 = pDlg->m_ResizePath.Left(2);//得到路径前面的2个字符
temp3 = pDlg->m_ResizePath.Right(s-2);
filename = temp2+ "\\" + temp3 + "\\" + temp1 + ".bmp";
cvSaveImage(filename,pResizeImage);//将采集的图片保存到相应的地址下面

/*---------------------------*/
float t = pDlg->AmpAnaly(pNewImage);//图像的分析
pDlg->DataStore(j,t);



cvReleaseImage(&pNewImage);
cvReleaseImage(&pResizeImage);

}
cvReleaseImage(&pSrc);
}
请问大家,为什么我执行到
for(int k = 1; k <= 4096; k++)
{
data1[(j-1)*pSrc->widthStep + k] = data0[(j-1)*pSrc->widthStep + k];
}
的时候老是报0xC0000005: 写入位置 0x01d20000 时发生访问冲突

...全文
379 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingtianyulong 2013-03-10
  • 打赏
  • 举报
回复
cvSize()里的两个参数是图像的width和height ,剩下的你自己琢磨吧
coldFire0 2013-03-10
  • 打赏
  • 举报
回复
同二楼+五楼 看越界需下断点一步步的运行啊 F10+F11 利器在此啊 放耐性点 肯定能找到问题
  • 打赏
  • 举报
回复
data1[(j-1)*pSrc(pSrc应为pNewImage)->widthStep + k] = data0[(j-1)*pSrc->widthStep + k];
jimette 2013-03-06
  • 打赏
  • 举报
回复
下断点看 !
cczu_yan 2013-03-06
  • 打赏
  • 举报
回复
引用 2 楼 sha_jinhao 的回复:
数组越界!!
不好意思,能具体点吗?
cczu_yan 2013-03-06
  • 打赏
  • 举报
回复
4096是列的意思,当j=1的时候,循环能够成功一次,然后在第二次循环的时候,k>200的时候就开始报老是报0xC0000005: 写入位置 0x01d20000 时发生访问冲突
jimette 2013-03-06
  • 打赏
  • 举报
回复
数组越界!!
wqvbjhc 2013-03-06
  • 打赏
  • 举报
回复
pSrc 图像没有4096行

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧