fixed bug #1306 (Vec assignment); added tests for Vec & Matx multiplication
This commit is contained in:
@@ -72,6 +72,8 @@ protected:
|
||||
bool TestTemplateMat();
|
||||
bool TestMatND();
|
||||
bool TestSparseMat();
|
||||
bool TestVec();
|
||||
bool TestMatxMultiplication();
|
||||
bool operations1();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
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()
|
||||
{
|
||||
try
|
||||
@@ -819,6 +871,12 @@ void CV_OperationsTest::run( int /* start_from */)
|
||||
|
||||
if (!TestSparseMat())
|
||||
return;
|
||||
|
||||
if (!TestVec())
|
||||
return;
|
||||
|
||||
if (!TestMatxMultiplication())
|
||||
return;
|
||||
|
||||
if (!operations1())
|
||||
return;
|
||||
|
Reference in New Issue
Block a user