OpenCV скалярный тип данных, когда использовать?

Вот мы можем взглянуть на основные структуры OpenCV. Мой вопрос — что такое тип данных «скаляр» и когда я его использую.

Здесь вы можете увидеть его определение:

template<typename _Tp> class CV_EXPORTS Scalar_ : public Vec<_Tp, 4>
{
public:
//! various constructors
Scalar_();
Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);
Scalar_(const CvScalar& s);
Scalar_(_Tp v0);

//! returns a scalar with all elements set to v0
static Scalar_<_Tp> all(_Tp v0);
//! conversion to the old-style CvScalar
operator CvScalar() const;

//! conversion to another data type
template<typename T2> operator Scalar_<T2>() const;

//! per-element product
Scalar_<_Tp> mul(const Scalar_<_Tp>& t, double scale=1 ) const;

// returns (v0, -v1, -v2, -v3)
Scalar_<_Tp> conj() const;

// returns true iff v1 == v2 == v3 == 0
bool isReal() const;
};

typedef Scalar_<double> Scalar;

Здесь вы можете увидеть пример, как они его используют

// make a 7x7 complex matrix filled with 1+3j.
Mat M(7,7,CV_32FC2,Scalar(1,3));
// and now turn M to a 100x60 15-channel 8-bit matrix.
// The old content will be deallocated
M.create(100,60,CV_8UC(15));

Итак, мой вопрос, почему я не могу использовать double в этом случае? Или массивы?

заранее спасибо

5

Решение

скаляр это

Шаблонный класс для 4-элементного вектора, производного от Vec.

Происходит от Vec<Tp, 4>, Скаляр и Scalar можно использовать так же, как типичные 4-элементные векторы. Тип Scalar широко используется в OpenCV для передачи значений пикселей.

Вы можете инициализировать Mat также по-другому, например:

Mat img(10, 10, CV_32FC2, { 2, 3 });

который будет внутренне преобразован в Vec_, Но так как подпись Matконструктор принимает ScalarЛучше воспользуйся Scalar,

Это позволит всегда использовать Scalar передать значения пикселей для всех изображений с 1 по 4 канала.

2

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

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

По вопросам рекламы [email protected]