type が一致しないエラーになる。
with OpenCV 2.3.1, Visual C++ 2010 Express, Windows XP
例:
//Scalar_<float> ave; Scalar ave; std::vector<float> data; std::vector<float> sub; ave = cv::mean(data); cv::subtract(data, ave, sub); // ave が Scalar_<float> だとエラー
//Scalar_<float> ave; Scalar ave; std::vector<float> data; std::vector<float> sub; ave = cv::mean(data); cv::subtract(data, ave, sub); // ave が Scalar_<float> だとエラー
/* OpenCV 2.3.1 */ #include <opencv2\core\core.hpp> #include <opencv2\imgproc\imgproc.hpp> #include <opencv2\highgui\highgui.hpp> #ifdef _DEBUG #pragma comment(lib,"opencv_core231d.lib") #pragma comment(lib,"opencv_imgproc231d.lib") #pragma comment(lib,"opencv_highgui231d.lib") #else #pragma comment(lib,"opencv_core231.lib") #pragma comment(lib,"opencv_imgproc231.lib") #pragma comment(lib,"opencv_highgui231.lib") #endif
Vec は, Matx の特別なケースと言えます. Matx は行列を表現しますが, Vec はベクトルを1行の行列として表現します.OpenCV2.1からOpenCV2.2の変更点(ChangeLog)
Vec<T,2> と Point_ は相互に変換可能で, Vec<T,3> と Point3_ も同様です.また, Vec<T,4> は CvScalar やScalar に変換することができます. Vec の要素にアクセスするには, operator[] を利用します.
固定型,固定サイズの行列に対する cv::Matx 型が追加されました.現在の Vec は,Matx から派生します.このクラスは,cv::Mat を使うとオーバヘッドが大きすぎるような,極小さい行列に対して利用されます.Matx と Mat は相互変換が可能です.