Я использую VS2015, EmguCV 3 и VB, и пытаюсь перевести некоторый код 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)
{...}
Я пытаюсь использовать некоторый код ориентации объекта, данный полностью Вот. В основном код собирается сказать мне угол, под которым объект ориентирован на изображении. К сожалению, это код 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 определено ранее, было успешно обработано (например, с порогом), поэтому я доволен m. контуры и иерархия с другой стороны могут быть проблематичными. Когда я запускаю код, я получаю необработанное исключение:
Это говорит о том, что я передал неправильные типы в OpenCV, хотя я ожидал, что Emgu справится с этим. Но я понятия не имею. Любая помощь?
На основе Документация и в разделе VB:
«контуры Тип: Emgu.CV.IOutputArray -> Обнаруженные контуры. Каждый контур
хранится как вектор точек.»
Поэтому вместо отправки одного MAT
как твой contours
, вы должны отправить контейнер векторов точек.
Посмотреть здесь Эквивалент векторов C ++ для VB.Net.
Других решений пока нет …