申明:以下的小技巧,均为 OpenCV2.4.2 下验证过的,但并不保证其它版本依然奏效 (1)利用数组来构建 cv::Mat 示例代码如下所示: void ArrayToMat(){double m[3][3];for (int i=0; i3; i++){for (int j=0; j3; j++){m[i][j] = i+j;coutm[i][j] ;}coutendl;
申明:以下的小技巧,均为 OpenCV2.4.2 下验证过的,但并不保证其它版本依然奏效
(1)利用数组来构建 cv::Mat
示例代码如下所示:
void ArrayToMat()
{
double m[3][3];
for (int i=0; i (i,j);
cout
不出意外的话,执行结果应该如下所示:
(2) IplImage* 跟 cv::Mat 之间的互相转换
示例代码:
void IplImageToMat()
{
IplImage* pImg = cvLoadImage("c:/test.jpg");
if (!pImg)
{
cout
笔者任意加载了电脑上一副图片,结果如下所示:
提醒,这里的格式转换并不申请新的内存,而仅仅是改变数据结构而已
(3)Mat 转换为 IplImge
示例代码:
void MatToIplImage()
{
Mat m = imread("c:/test.jpg");
if (m.empty())
{
cout
笔者任意加载一张图片,上述代码的执行 结果为:
(4)访问二维数据( cv::Mat )最高效的方式是先得到该二维数据的每一行的指针,然后利用下标运算符逐列访问
示例代码:
void MatAccess()
{
double m[3][3];
for (int i=0; i (i);
for (int j=0; j
上面的代码执行 结果为:
(5)cv::Mat 支持 STL 中的迭代器功能
示例代码:
void MatAccess()
{
double m[3][3];
for (int i=0; i (i);
for (int j=0; j it = M.begin ();
MatConstIterator_ itEnd = M.end ();
for (;it!=itEnd; it++)
{
sum += *it;
}
cout
运行结果:
(6) satureat_cast : openCV 中用于数据“饱和”判断
示例:
void Saturate_castTest()
{
int r = 300;
uchar t = saturate_cast (r);
cout
结果:
(7)获取函数执行时间
getTickCount ()和 getTickFrequency ()结合起来可以用来计算函数执行时间,尤其是很小的代码片段的执行时间
举例:
void GetFuncTime()
{
double exec_time = (double)getTickCount();
for (int i=0; i
上面的代码,重点在于for 循环,且,该循环中什么也不处理;用一般的时间函数很难计算出该代码片段的执行时间,但利用 getTickCount ()和 getTickFrequency ()就很容易。笔者电脑上的结果是: