Я использую VS2015, EmguCV 3 и VB и пытаюсь перевести некоторый код на C++.Использование OpenCV Mat в качестве массива: VB vs C++
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)
{...}
Я пытаюсь использовать некоторые ориентации объекта код, указанный в полном here. В основном код подскажет мне угол, на котором объект ориентирован в изображении. К сожалению, это код 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)
Я использую EmguCV 3. Это утверждает, что FindContours
принимает image As IInputOutputArray, contours As IOutputArray, hierarchy As IOutputArray
. Поэтому я подумал, что могу предоставить три мата. m определено ранее, была успешно обработана (например, с Threshold), поэтому я доволен m. контуры и иерархия, с другой стороны, могут быть проблематичными. Когда я запускаю код, я получаю необработанное исключение:
Это наводит на мысль, что я прошел неподходящие для OpenCV, хотя я ожидал бы Emgu, чтобы справиться с этим. Но я понятия не имею. Любая помощь?
Похоже, что C++ '<' в этом контексте грубо переводится как '(' в VB, в то время как 'vector' грубо говорит массив. Но, что более важно, оказывается, что Emgu реализует тип, называемый VectorOfVectorOfPoint, с которым я сейчас экспериментирую. С иерархией, как 'VectorOfVectorOfPoint', а не' Mat', мой код теперь, по крайней мере, работает без сбоев, так что это прогресс! ;-) – Nobody