2014-06-24 7 views
0

현재 OpenCv를 사용하는 Intel Perceptual 카메라에서 작업 중입니다. 카메라에서 이미지를 가져 와서 cv :: Mat 유형으로 변환 한 다음 스킨과 깊이 필터를 적용 할 수 있습니다.
이제 openCV에서 "convexHull"함수를 사용하여 볼록 선을 계산하려고하지만 힙 손상이 발생합니다.openCV로 볼록한 선체 및 힙 손상

여기서 코드의 재미있는 부분 : 피부 (255)를 0의 값으로 채워진 모체 인

Mat skin = curr.GetSkin() 
vector<Point> points; 


for(int i=0; i<skin.rows; i++) 
{ 
    for(int j=0; j<skin.cols; j++) 
    { 

      if ((int) skin.at<unsigned char>(i,j) > 0) 
      { 
       Point pt ; 
       pt.x = j ; 
       pt.y = i ; 
       points.push_back(pt); 

      } 
     } 
    } 
    Mat img(skin.rows, skin.cols, CV_8UC3); 
    vector<int> hull; 

    convexHull(Mat(points), hull, true); 

.

NB : 이것은 내부 루프입니다.
제안 사항이 있으십니까?

추신 : 저는 PCL을 사용하여 동일한 문제가있었습니다. 법선을 계산하려고하자마자 힙 손상이 나타났습니다.

+0

가 오류를 포함하는 코드의 조각을 제공 할 수 있습니다이 문제를 해결할 것인가? – Sga

+0

제공된 정보를 기반으로 가능한 유일한 조언은 힙 손상 원인을 찾아 수정해야한다는 것입니다. (당신은 아마 동적으로 할당 된 배열의 바깥 쪽에서 또는 할당 취소 된 객체를 사용하여 쓰는 중입니다.) – molbdnilo

+0

방금 ​​일부 코드를 추가하기 위해 내 게시물을 편집했습니다. "convexHull (...)"줄을 제거하면 모든 것이 잘 실행됩니다. 대답 주셔서 감사합니다 – Hinkel

답변

0

힙 손상 문제의 경우 VS 2010보다 최신 VS를 사용하는 경우 다음을 시도하십시오. VS201의 프로젝트 속성으로 이동하십시오. 구성이 "모든 구성"으로 설정되어 있는지 확인하십시오. 그런 다음 "구성 속성 -> 일반 -> 플랫폼 도구 모음"에서 "Visual Studio 2010 (v100)"을 선택합니다. Open CV는 v100을 사용하므로 IDE를 사용하지 않는 경우 호환성 문제가 있습니다.

0

동일한 문제가 있습니다. 벡터 선체가 파괴되면 메모리 손상이 발생했습니다.

vector<int>* hull = new vector<int>(); 
convexHull(Mat(points), *hull, true); 
delete hull; //memory corrupted 

선체가 처음 크기를 조정하면, 그것은

vector<int> hull; 
hull.resize(points.size()); 
convexHull(Mat(points), hull, true);