CvInvoke.ConvexityDefects () в EmguCV 3.0

У меня есть проблема, чтобы указать тип переменных для ConvexityDefects в EmguCv 3.0.

Я не могу найти замену Vec4i для объявления «дефектов».

VectorOfVectorOfInt defects = new VectorOfVectorOfInt() -> Это просто очередная попытка найти подходящий тип.

Каждый раз, когда у меня есть фатальная ошибка:

Исключение: «System.ArgumentException» в mscorlib.dll
Не найдено подходящего каталога для загрузки неуправляемых модулей
Возникло исключение: Emgu.CV.Util.CvException в Emgu.CV.dll

и программа перемещает меня сюда, чтобы соответствовать CvException:


private static int CvErrorHandler(
int status,
IntPtr funcName,
IntPtr errMsg,
IntPtr fileName,
int line,
IntPtr userData)
{
try
{
SetErrStatus(Emgu.CV.CvEnum.ErrorCodes.StsOk); //clear the error status
return 0; //signal the process to continue
}
finally
{
String funcNameStr = Marshal.PtrToStringAnsi(funcName);
String errMsgStr = Marshal.PtrToStringAnsi(errMsg);
String fileNameStr = Marshal.PtrToStringAnsi(fileName);
throw new CvException(status, funcNameStr, errMsgStr, fileNameStr, line);
}
}

Буду благодарен за вашу помощь.

Часть моего кода:

using (VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint())
{

CvInvoke.FindContours(grayImg, contours, null, RetrType.List, ChainApproxMethod.ChainApproxSimple); int count = contours.Size; for (int i = 0; i < count; i++) { using (VectorOfPoint contour = contours[i]) using (VectorOfVectorOfInt defects = new VectorOfVectorOfInt()) using (VectorOfPoint approxContour = new VectorOfPoint()) using (VectorOfPoint hull = new VectorOfPoint()) { CvInvoke.ApproxPolyDP(contour, approxContour, 50, true); CvInvoke.ConvexHull(contour, hull, false); CvInvoke.Polylines(openCvImg, hull, true, new MCvScalar(0, 255, 0), 1, LineType.AntiAlias); CvInvoke.ConvexityDefects(contour, hull, defects); } largest_contour_index = i; } CvInvoke.DrawContours(openCvImg, contours, largest_contour_index, new MCvScalar(0, 0, 255), 1, LineType.EightConnected); }

2

Решение

У меня была точно такая же проблема … Я нашел решение в модульных тестах EmguCv (модульные тесты часто являются вашей лучшей документацией)
Тест называется TestConvexityDefacts и находится в файле AutoTestVarious в проекте Emgu.CV.Test.
Вот ссылка (но это не официальный репо)
Тестовый файл EmguCv

Официальный репозиторий здесь: git: //git.code.sf.net/p/emgucv/code emgucv

Решение состоит в том, чтобы использовать Mat, как IOutputArray. Получить данные из него не так просто; / Но этот модульный тест поможет.

Имейте в виду, что из матрицы вы получите индексы очков. Чтобы получить координаты точки, вам нужно использовать этот индекс для вектора контура точек.

Матрица имеет 3 столбца — начальная точка, конечная точка и самая дальняя точка.

Также у меня была проблема с корпусом VectorOfPoint в качестве входных данных в ConvexityDefects — мне пришлось изменить его на VectorOfInt — если бы я не сделал, метод ConvexityDefects выдал какое-то исключение …

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector