日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C语言中cvpoint后运行出错,c++ - 使用cvCreateSeq时出现未处理的异常 - 堆栈内存溢出...

發布時間:2023/12/18 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中cvpoint后运行出错,c++ - 使用cvCreateSeq时出现未处理的异常 - 堆栈内存溢出... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在使用cvCreateSeq函數在opencv中創建序列,而調試時會發生異常,例如“未處理的異常在0x7c812afb”。我使用C語言進行編碼,并且IDE是Visual C ++ 2010 Express Edition。

誰能告訴我為什么發生此異常。

謝謝,

代碼是:-

void main()

{

char * file = "D:\\testImage.jpg";

temp(file);

}

void computeCococlust(char * filepath)

{

CvMemStorage * storageContour = NULL;

CvSeq * first_contour = NULL;

IplImage * iOriginal = NULL;

/*Load the image*/

iOriginal = cvLoadImage(filepath,CV_LOAD_IMAGE_UNCHANGED);

/*Load a Grayscale image*/

IplImage * iGray = cvLoadImage(filepath,CV_LOAD_IMAGE_GRAYSCALE);

/*Show original image in a window named 'Original Image'*/

fnShowImageInWindow("Original Image",iOriginal);

/*Show graylevel image in a window named 'GrayLevel Image'*/

fnShowImageInWindow("GrayLevel Image",iGray);

fnReleasingMemoryOfWindow("GrayLevel Image",iGray);

/*------Getting single channel image as red green blue from RGB iOriginal----------*/

IplImage *iRed = cvCreateImage(cvGetSize(iOriginal), iOriginal->depth, 1);

IplImage *iGreen = cvCreateImage(cvGetSize(iOriginal), iOriginal->depth, 1);

IplImage *iBlue = cvCreateImage(cvGetSize(iOriginal), iOriginal->depth, 1);

cvSplit(iOriginal, iBlue, iGreen, iRed, NULL);

/*Show iRed,iGreen,iBlue in window*/

fnShowImageInWindow("Red Component Image",iRed);

fnShowImageInWindow("Green Component Image",iGreen);

fnShowImageInWindow("Blue Component Image",iBlue);

/*---------------------------------------------------------------------------------*/

/*--------Perform canny edge detection--------------------------------------------*/

/*For Red Component*/

IplImage * eRed = cvCreateImage(cvGetSize(iRed),iRed->depth,1);

cvCanny(iRed,eRed,10,100,3);

/*For Green Component*/

IplImage * eGreen = cvCreateImage(cvGetSize(iGreen),iGreen->depth,1);

cvCanny(iGreen,eGreen,10,100,3);

/*For Blue Component*/

IplImage * eBlue = cvCreateImage(cvGetSize(iBlue),iBlue->depth,1);

cvCanny(iBlue,eBlue,10,100,3);

/*-----Show eRed,eGreen,eBlue in window------------------------------------------*/

fnShowImageInWindow("Red Component Edge Image",eRed);

fnShowImageInWindow("Green Component Edge Image",eGreen);

fnShowImageInWindow("Blue Component Edge Image",eBlue);

/*-------------------------------------------------------------------------------*/

/*-----Performing union of edge images by using cvMax-----------------------------*/

IplImage * iMaxTmp = cvCreateImage(cvGetSize(iOriginal),iOriginal->depth,1);

IplImage * iUnionImage = cvCreateImage(cvGetSize(iOriginal),iOriginal->depth,1);

cvMax(eRed,eGreen,iMaxTmp);

cvMax(iMaxTmp,eBlue,iUnionImage);

fnShowImageInWindow("union of all images",iUnionImage);

/*-------------------------------------------------------------------------------*/

/*----Getting the boundary pixel of each connected component---------------------*/

storageContour = cvCreateMemStorage(0);

int numCountour = cvFindContours(iUnionImage,storageContour,&first_contour,sizeof(CvContour),CV_RETR_CCOMP,CV_CHAIN_APPROX_NONE);

printf("Total countours detected %d",numCountour);

CvMemStorage * storage = cvCreateMemStorage(0);

/*-------------------------------------------------------------------------------*/

/*----Smoothing the contour------------------------------------------------------*/

for(CvSeq * seqSmooth = first_contour;seqSmooth!=NULL;seqSmooth = seqSmooth->h_next)

{

CvSeq * newSeq = cvCreateSeq(CV_32FC1,sizeof(CvSeq),sizeof(CvPoint),storage);

for(int i =3 ; itotal-2 ;i++)

{

CvPoint * ps1 = CV_GET_SEQ_ELEM(CvPoint,seqSmooth,i-2);

CvPoint * ps2 = CV_GET_SEQ_ELEM(CvPoint,seqSmooth,i-1);

CvPoint * ps3 = CV_GET_SEQ_ELEM(CvPoint,seqSmooth,i);

CvPoint * ps4 = CV_GET_SEQ_ELEM(CvPoint,seqSmooth,i+1);

CvPoint * ps5 = CV_GET_SEQ_ELEM(CvPoint,seqSmooth,i+2);

CvPoint newPoint = cvPoint((ps1->x + ps2->x + ps3->x + ps4->x + ps5->x)/5,(ps1->y + ps2->y + ps3->y + ps4->y + ps5->y)/5);

cvSeqPush(newSeq,&newPoint);

}

if(storageContour->bottom->prev != NULL)

{

CvMemBlock * oldNext = storageContour->bottom->next;

CvMemBlock * oldPrev = storageContour->bottom->prev;

storageContour->bottom = newSeq->storage->bottom;

storageContour->bottom->next = oldNext;

storageContour->bottom->prev = oldPrev;

}

else

{

CvMemBlock * oldNext = storageContour->bottom->next;

storageContour->bottom = newSeq->storage->bottom;

}

}

總結

以上是生活随笔為你收集整理的C语言中cvpoint后运行出错,c++ - 使用cvCreateSeq时出现未处理的异常 - 堆栈内存溢出...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。