4
Here我們可以看看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
的例子嗎?或數組?
預先感謝
'Scalar'只是爲了方便使用。由於大部分OpenCV在最大4個通道圖像上運行,所以'標量'是一個簡單的類,它實際上是一個長度爲4的cv :: Vec,OpenCV算法可以根據圖像的通道數量使用它。不要每次都創建一個長度不同的數組,而只需將一個標量值傳遞給算法。 – sgarizvi
感謝您的快速響應 –