Похожий OpenCV обнаружение контуров - это путь.
не выглядит так плохо, как отправная точка:
, используя этот первый шаг
ret,thresh1 = cv2.threshold(img,220,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(img,220,255,cv2.THRESH_BINARY_INV)
Не возможный. Нет никакого наследования с перечислениями.
можно вместо этого использовать классы с именованной константой ints.
Пример:
class Colors
{
public:
static const int RED = 1;
static const int GREEN = 2;
};
class RGB : public Colors
{
static const int BLUE = 10;
};
class FourColors : public Colors
{
public:
static const int ORANGE = 100;
static const int PURPLE = 101;
};
#include <iostream>
#include <ostream>
class Enum
{
public:
enum
{
One = 1,
Two,
Last
};
};
class EnumDeriv : public Enum
{
public:
enum
{
Three = Enum::Last,
Four,
Five
};
};
int main()
{
std::cout << EnumDeriv::One << std::endl;
std::cout << EnumDeriv::Four << std::endl;
return 0;
}
Невозможный.
, Но можно определить перечисление анонимно в классе, затем добавить дополнительные перечислимые константы в производных классах.
Вы не можете сделать это напрямую, но вы можете попробовать использовать решение из это статья.
Основная идея состоит в том, чтобы использовать вспомогательный шаблонный класс, который содержит значения перечисления и имеет оператор приведения типа. Учитывая, что базовым типом для enum является int
, вы можете легко использовать этот класс-держатель в своем коде вместо enum.
Что ж, если вы определите перечисление
с тем же именем в производном классе и начнете его с последнего элемента соответствующего перечисления
в базовом классе, вы получите почти то, что вы хотите - унаследованный enum.
Взгляните на этот код:
class Base
{
public:
enum ErrorType
{
GeneralError,
NoMemory,
FileNotFound,
LastItem
}
}
class Inherited: public Base
{
enum ErrorType
{
SocketError = Base::LastItem,
NotEnoughBandwidth,
}
}