2016-08-30 6 views
1

VS2015, EmguCV 3 및 VB를 사용 중이며 일부 C++ 코드를 변환하려고합니다.OpenCV Mat을 배열로 사용 : VB 대 C++

내가 전체 here에 주어진 몇 가지 객체 지향 코드를 사용하려고 해요 C++

vector<vector<Point> > contours; 
vector<Vec4i> hierarchy; 
findContours(bw, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_NONE); 
for (size_t i = 0; i < contours.size(); ++i) 
{...} 

. 기본적으로 코드는 객체가 이미지에서 지향하는 각도를 알려줍니다. 불행하게도 그것은 C++ 코드이며 VB 개발자의 두뇌는 C++ 구문에 따라 폭발 할 수 있습니다. 내 스크린을 다시 청소할 필요가 없다면 도움이 될 것입니다. 폭발물은이 특별한 경우에 vector<vector<point> > contours;이었고 나의 질문은 그것을 어떻게 번역 할 것인가에 관한 것입니다.

나는 여기까지 가지고 :

VB

Imports Emgu.CV 
Imports Emgu.CV.Structure 
... 
contours = New Mat 
hierarchy = New Mat 
CvInvoke.FindContours(m, contours, hierarchy, CvEnum.RetrType.List, CvEnum.ChainApproxMethod.ChainApproxNone) 

을 나는이 FindContoursimage As IInputOutputArray, contours As IOutputArray, hierarchy As IOutputArray 소요 주장 EmguCV 3을 사용하고 있습니다. 그래서 나는 3 마리의 매트를 제공 할 수 있다고 생각했습니다. m이 이전에 성공적으로 처리되었으므로 (예 : 임계 값과 함께) m에 만족합니다. 등고선 및 계층 구조가 문제가 될 수 있습니다. 나는이 코드를 실행하면, 내가 처리되지 않은 예외가 :

Emgu.CV.Util.CvException: OpenCV: (_contours.kind() == _InputArray::STD_VECTOR_VECTOR || _contours.kind() == _InputArray::STD_VECTOR_MAT || _contours.kind() == _InputArray::STD_VECTOR_UMAT)

이것은 내가 Emgu가 처리 할 것으로 예상 한 것이지만 내가 OpenCV의에 잘못된 유형을 통과 한 제안 할 것으로 보인다. 그러나 나는 단서가 없다. 어떤 도움이 필요합니까?

+0

이 컨텍스트에서 C++'<'는 VB에서'('VB''는 대략적으로 배열을 말하는 반면에 Emgu는''VectorOfVectorOfPoint''라는 타입을 구현한다고 밝혀졌습니다. 'Mat' 대신에'VectorOfVectorOfPoint'와 같은 계층 구조를 사용하면, 이제는 내 코드가 적어도 오류없이 실행되어 진행됩니다. ;-) – Nobody

답변

1

Documentation에와 VB 섹션에서 기준 자료 :

"윤곽 유형 :. Emgu.CV.IOutputArray - 감지 윤곽>각 윤곽 포인트의 벡터로 저장됩니다."

따라서, 대신 contours 같은 단일 MAT을 보내, 당신은 포인트 벡터의 용기를 전송해야한다.

여기를 참조하십시오. The Equivalent of C++ Vectors for VB.Net.

+0

아 ... 점 벡터의 컨테이너! 예, 물론 8- /! 좋아, 나는 그 중 하나가 무엇인지 알아 내려고 노력할 것이다. 포인터에 대해 많은 감사드립니다. – Nobody

+0

그래, 분명히. 다행히 도울 수있었습니다 :);) –

+0

Emgu는이 목적을 위해 명시 적으로'VectorOfVectorOfPoints'라는 클래스를 제공합니다. 이제 작업 코드가 있습니다! 감사. – Nobody