fixed bug #1306 (Vec assignment); added tests for Vec & Matx multiplication
This commit is contained in:
parent
58c0bea68a
commit
fba70ca131
@ -592,7 +592,6 @@ public:
|
|||||||
explicit Vec(const _Tp* values);
|
explicit Vec(const _Tp* values);
|
||||||
|
|
||||||
Vec(const Vec<_Tp, cn>& v);
|
Vec(const Vec<_Tp, cn>& v);
|
||||||
Vec<_Tp, cn>& operator =(const Matx<_Tp, cn, 1>& m);
|
|
||||||
|
|
||||||
static Vec all(_Tp alpha);
|
static Vec all(_Tp alpha);
|
||||||
|
|
||||||
|
@ -1039,14 +1039,6 @@ Vec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, _T2 alpha, Matx_ScaleOp op)
|
|||||||
: Matx<_Tp, cn, 1>(a, alpha, op)
|
: Matx<_Tp, cn, 1>(a, alpha, op)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<typename _Tp, int cn> inline
|
|
||||||
Vec<_Tp, cn>& Vec<_Tp, cn>::operator = (const Matx<_Tp, cn, 1>& m)
|
|
||||||
{
|
|
||||||
for( int i = 0; i < cn; i++ )
|
|
||||||
this->val[i] = m.val[i];
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename _Tp, int cn> inline Vec<_Tp, cn> Vec<_Tp, cn>::all(_Tp alpha)
|
template<typename _Tp, int cn> inline Vec<_Tp, cn> Vec<_Tp, cn>::all(_Tp alpha)
|
||||||
{
|
{
|
||||||
Vec v;
|
Vec v;
|
||||||
|
@ -72,6 +72,8 @@ protected:
|
|||||||
bool TestTemplateMat();
|
bool TestTemplateMat();
|
||||||
bool TestMatND();
|
bool TestMatND();
|
||||||
bool TestSparseMat();
|
bool TestSparseMat();
|
||||||
|
bool TestVec();
|
||||||
|
bool TestMatxMultiplication();
|
||||||
bool operations1();
|
bool operations1();
|
||||||
|
|
||||||
void checkDiff(const Mat& m1, const Mat& m2, const string& s) { if (norm(m1, m2, NORM_INF) != 0) throw test_excep(s); }
|
void checkDiff(const Mat& m1, const Mat& m2, const string& s) { if (norm(m1, m2, NORM_INF) != 0) throw test_excep(s); }
|
||||||
@ -747,6 +749,56 @@ bool CV_OperationsTest::TestSparseMat()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CV_OperationsTest::TestMatxMultiplication()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Matx33f mat(1, 0, 0, 0, 1, 0, 0, 0, 1); // Identity matrix
|
||||||
|
Point2f pt(3, 4);
|
||||||
|
Point3f res = mat * pt; // Correctly assumes homogeneous coordinates
|
||||||
|
if(res.x != 3.0) throw test_excep();
|
||||||
|
if(res.y != 4.0) throw test_excep();
|
||||||
|
if(res.z != 1.0) throw test_excep();
|
||||||
|
}
|
||||||
|
catch(const test_excep&)
|
||||||
|
{
|
||||||
|
ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_OUTPUT);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CV_OperationsTest::TestVec()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
cv::Mat hsvImage_f(5, 5, CV_32FC3), hsvImage_b(5, 5, CV_8UC3);
|
||||||
|
int i = 0,j = 0;
|
||||||
|
cv::Vec3f a;
|
||||||
|
|
||||||
|
//these compile
|
||||||
|
cv::Vec3b b = a;
|
||||||
|
hsvImage_f.at<cv::Vec3f>(i,j) = cv::Vec3f(i,0,1);
|
||||||
|
hsvImage_b.at<cv::Vec3b>(i,j) = cv::Vec3b(cv::Vec3f(i,0,1));
|
||||||
|
|
||||||
|
//these don't
|
||||||
|
b = cv::Vec3f(1,0,0);
|
||||||
|
cv::Vec3b c;
|
||||||
|
c = cv::Vec3f(0,0,1);
|
||||||
|
hsvImage_b.at<cv::Vec3b>(i,j) = cv::Vec3f(i,0,1);
|
||||||
|
hsvImage_b.at<cv::Vec3b>(i,j) = a;
|
||||||
|
hsvImage_b.at<cv::Vec3b>(i,j) = cv::Vec3f(1,2,3);
|
||||||
|
}
|
||||||
|
catch(const test_excep&)
|
||||||
|
{
|
||||||
|
ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_OUTPUT);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool CV_OperationsTest::operations1()
|
bool CV_OperationsTest::operations1()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -820,6 +872,12 @@ void CV_OperationsTest::run( int /* start_from */)
|
|||||||
if (!TestSparseMat())
|
if (!TestSparseMat())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!TestVec())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!TestMatxMultiplication())
|
||||||
|
return;
|
||||||
|
|
||||||
if (!operations1())
|
if (!operations1())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user