opencv2.3.1随记

1. 关于Mat的row操作

cv::Mat mat1 = cv::Mat(2,2,CV_64F);
mat1.at<double>(0,0) = 1;mat1.at<double>(0,1) = 2;
mat1.at<double>(1,0) = 3;mat1.at<double>(1,1) = 4;
cv::Mat mat2 = cv::Mat(2,2,CV_64F);
mat2.row(0) = mat1.row(0);
mat2.row(1) = mat1.row(1);
std::cout<<mat1<<std::endl;
std::cout<<mat2<<std::endl;

按照以上代码,mat2并没有被正确赋值,而改成下面这样就对了

cv::Mat mat1 = cv::Mat(2,2,CV_64F);
mat1.at<double>(0,0) = 1;mat1.at<double>(0,1) = 2;
mat1.at<double>(1,0) = 3;mat1.at<double>(1,1) = 4;
cv::Mat mat2 = cv::Mat(2,2,CV_64F);
mat2.row(0) = mat1.row(0)+0;
mat2.row(1) = mat1.row(1)+0;
std::cout<<mat1<<std::endl;
std::cout<<mat2<<std::endl;

 

2. Mat.at在debug下有越界检查,但在release下没有

例如下面代码

cv::Mat mat = cv::Mat(2,2,CV_32F);
std::cout<<mat.at<float>(10,10)<<std::endl;

在release下能够通过编译并运行,但在debug下会触发越界错误。因此,这种对Mat元素的存取操作在release下比debug下快很多,尤其对于较大的数组。

 

posted @ 2012-04-16 19:55  yangyangcv  阅读(1832)  评论(4编辑  收藏  举报