处未处理的错误: 0xC0000005: 写入位置 0x02036000 时发生访问冲突
处未处理的异常: 0xC0000005: 写入位置 0x02036000 时发生访问冲突
我知道应该是指针的问题,如何解决这个问题,望恢复的尽量详细些
#include<iostream>
#include "highgui.h"
#include "cv.h"
#include "cxcore.h"
#include "string.h"
#include <vector>
#include <algorithm>
#include <functional>
#include <cmath>
#include "D:\Program Files\OpenCV2.3\opencvx\cvdivs.h"
#include "D:\Program Files\OpenCV2.3\opencvx\cvsumbyrow.h"
#include "D:\Program Files\OpenCV2.3\opencvx\cvsumbycol.h"
#include "D:\Program Files\OpenCV2.3\opencvx/cvsetcol.h"
#include "D:\Program Files\OpenCV2.3\opencvx/cvmuls.h"
#include "D:\Program Files\OpenCV2.3\opencv\modules\legacy\src\cvcompat.h"
IplImage* MirrorCEBoundary(IplImage*im,int radius)
{
IplImage* imr=cvCreateImage(cvSize(im->height,im->width),im->depth,im->nChannels);
imr=cvCloneImage(im);
double *imdata = (double*)im->imageData;
double *imrdata = (double*)imr->imageData;
int imstep = im->widthStep;
int imchannels = im->nChannels;
int imrstep = imr->widthStep;
int imrchannels = imr->nChannels;
int m=im->height;
int n=im->width;
int half_m = m/2;
int half_n = n/2;
//[x,y] = meshgrid([1:n],[1:m]);
//x = x - half_n;
//y = y - half_m;
//rMatrix = sqrt(x.^2+y.^2);
//rMatrixD = rMatrix - radius;
//thetaMatrix = atan2(y,x);
//inx1 = find(rMatrix>radius);
//rDArray = rMatrixD(inx1);
//thetaArray = thetaMatrix(inx1);
CvMat* X=cvCreateMat(m,n,CV_64FC1);
CvMat* Y=cvCreateMat(m,n,CV_64FC1);
CvMat* rMatrix =cvCreateMat(m,n,CV_64FC1);
CvMat* rMatrixD =cvCreateMat(m,n,CV_64FC1);
CvMat* thetaMatrix =cvCreateMat(m,n,CV_64FC1);
for (int i=0;i<m;i++)
{
for (int j=0;j<n;j++)
{
CV_MAT_ELEM(*X,double,i,j)=j+1-half_n;
CV_MAT_ELEM(*Y,double,i,j)=i+1-half_m;
CV_MAT_ELEM(*rMatrix,double,i,j)=sqrt((i+1.0)*(i+1.0)+(j+1.0)*(j+1.0));
CV_MAT_ELEM(*rMatrixD,double,i,j)=CV_MAT_ELEM(*rMatrix,double,i,j)-radius;
CV_MAT_ELEM(*thetaMatrix,double,i,j)=atan2(double(i+1-half_m),double(j+1-half_n));
if(CV_MAT_ELEM(*rMatrix,double,i,j)>radius)
{
double d=CV_MAT_ELEM(*rMatrixD,double,i,j);
double theta=CV_MAT_ELEM(*thetaMatrix,double,i,j);
double t_r = radius-d;
int pos_x = floor(t_r*cos(theta)+half_n);
int pos_y = floor(t_r*sin(theta)+half_m);
imrdata[i*imrstep+j*imrchannels+0]=imdata[pos_y*imstep+pos_x *imchannels+0];
imrdata[i*imrstep+j*imrchannels+1]=imdata[pos_y*imstep+pos_x *imchannels+1];
imrdata[i*imrstep+j*imrchannels+2]=imdata[pos_y*imstep+pos_x *imchannels+2];
}
}
}
return imr;
}
int main()
{
IplImage* image1_org=cvLoadImage("E:\\C++程序\\BA\\1368.bmp");
cvNamedWindow("image1_org",CV_WINDOW_AUTOSIZE);
cvShowImage("image1_org",image1_org);
IplImage* image1=cvCreateImage(cvSize(image1_org->height,image1_org->width),image1_org->depth,image1_org->nChannels);
image1= MirrorCEBoundary(image1_org,105);
cvNamedWindow("image1",CV_WINDOW_AUTOSIZE);
cvShowImage("image1",image1);
cvWaitKey(0);
cvReleaseImage(&image1_org);
cvReleaseImage(&image1);
cvDestroyAllWindows();
return 0;
}
------解决方案--------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
------解决方案--------------------
我知道应该是指针的问题,如何解决这个问题,望恢复的尽量详细些
#include<iostream>
#include "highgui.h"
#include "cv.h"
#include "cxcore.h"
#include "string.h"
#include <vector>
#include <algorithm>
#include <functional>
#include <cmath>
#include "D:\Program Files\OpenCV2.3\opencvx\cvdivs.h"
#include "D:\Program Files\OpenCV2.3\opencvx\cvsumbyrow.h"
#include "D:\Program Files\OpenCV2.3\opencvx\cvsumbycol.h"
#include "D:\Program Files\OpenCV2.3\opencvx/cvsetcol.h"
#include "D:\Program Files\OpenCV2.3\opencvx/cvmuls.h"
#include "D:\Program Files\OpenCV2.3\opencv\modules\legacy\src\cvcompat.h"
IplImage* MirrorCEBoundary(IplImage*im,int radius)
{
IplImage* imr=cvCreateImage(cvSize(im->height,im->width),im->depth,im->nChannels);
imr=cvCloneImage(im);
double *imdata = (double*)im->imageData;
double *imrdata = (double*)imr->imageData;
int imstep = im->widthStep;
int imchannels = im->nChannels;
int imrstep = imr->widthStep;
int imrchannels = imr->nChannels;
int m=im->height;
int n=im->width;
int half_m = m/2;
int half_n = n/2;
//[x,y] = meshgrid([1:n],[1:m]);
//x = x - half_n;
//y = y - half_m;
//rMatrix = sqrt(x.^2+y.^2);
//rMatrixD = rMatrix - radius;
//thetaMatrix = atan2(y,x);
//inx1 = find(rMatrix>radius);
//rDArray = rMatrixD(inx1);
//thetaArray = thetaMatrix(inx1);
CvMat* X=cvCreateMat(m,n,CV_64FC1);
CvMat* Y=cvCreateMat(m,n,CV_64FC1);
CvMat* rMatrix =cvCreateMat(m,n,CV_64FC1);
CvMat* rMatrixD =cvCreateMat(m,n,CV_64FC1);
CvMat* thetaMatrix =cvCreateMat(m,n,CV_64FC1);
for (int i=0;i<m;i++)
{
for (int j=0;j<n;j++)
{
CV_MAT_ELEM(*X,double,i,j)=j+1-half_n;
CV_MAT_ELEM(*Y,double,i,j)=i+1-half_m;
CV_MAT_ELEM(*rMatrix,double,i,j)=sqrt((i+1.0)*(i+1.0)+(j+1.0)*(j+1.0));
CV_MAT_ELEM(*rMatrixD,double,i,j)=CV_MAT_ELEM(*rMatrix,double,i,j)-radius;
CV_MAT_ELEM(*thetaMatrix,double,i,j)=atan2(double(i+1-half_m),double(j+1-half_n));
if(CV_MAT_ELEM(*rMatrix,double,i,j)>radius)
{
double d=CV_MAT_ELEM(*rMatrixD,double,i,j);
double theta=CV_MAT_ELEM(*thetaMatrix,double,i,j);
double t_r = radius-d;
int pos_x = floor(t_r*cos(theta)+half_n);
int pos_y = floor(t_r*sin(theta)+half_m);
imrdata[i*imrstep+j*imrchannels+0]=imdata[pos_y*imstep+pos_x *imchannels+0];
imrdata[i*imrstep+j*imrchannels+1]=imdata[pos_y*imstep+pos_x *imchannels+1];
imrdata[i*imrstep+j*imrchannels+2]=imdata[pos_y*imstep+pos_x *imchannels+2];
}
}
}
return imr;
}
int main()
{
IplImage* image1_org=cvLoadImage("E:\\C++程序\\BA\\1368.bmp");
cvNamedWindow("image1_org",CV_WINDOW_AUTOSIZE);
cvShowImage("image1_org",image1_org);
IplImage* image1=cvCreateImage(cvSize(image1_org->height,image1_org->width),image1_org->depth,image1_org->nChannels);
image1= MirrorCEBoundary(image1_org,105);
cvNamedWindow("image1",CV_WINDOW_AUTOSIZE);
cvShowImage("image1",image1);
cvWaitKey(0);
cvReleaseImage(&image1_org);
cvReleaseImage(&image1);
cvDestroyAllWindows();
return 0;
}
------解决方案--------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
------解决方案--------------------