OpenCV中将MAT类型的对象作为InputArray类型的对像传递给函数
Posted NodYoung
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV中将MAT类型的对象作为InputArray类型的对像传递给函数相关的知识,希望对你有一定的参考价值。
初学OpenCV发现,发现这样一种情况:
void imshow(const string& winname, InputArray mat);
明明是InputArray类型的形参,而我们一般都使用Mat类型的实参来直接传递。
这是怎么回事呢?
说白了,这是一个类型的对象转换为另一个类型的对象。使用C++中的类型转换构造函数来完成,关于类型转换构造函数这里有个链接,仅供参考:(C++数据类型转换以及转换构造函数)http://c.biancheng.net/cpp/biancheng/view/221.html
我们查看OpenCV源码中_InputArray类的定义,也确实是这样,如下:
class CV_EXPORTS _InputArray
public:
......
_InputArray(const Mat& m);//在这里
_InputArray(const MatExpr& expr);
......
int flags;
void* obj;
Size sz;
;
再点进去:
/*********************************\\
Input/Output Array
\\*********************************/
......
_InputArray::_InputArray(const Mat& m) : flags(MAT), obj((void*)&m)
_InputArray::_InputArray(const vector<Mat>& vec) : flags(STD_VECTOR_MAT), obj((void*)&vec)
......
至此,我们已大致了解OpenCV的函数形参中一个类型对象转换为另一个类型对象的方法。
下面再给个小例程:
#include <iostream>
using namespace std;
class B
;
class A
public:
A(B b)
cout << "Type cnversion constructor" << endl;
A(A& a)//这个是复制构造函数,这里没有使用。
cout << "Copy constructor" << endl;
;
int ok(A a)
cout << "ok" << endl;
return 0;
int main()
B b;
ok(b);//此处将B类型的对象转换为A类型的对象传递给函数了
return 0;
以上是关于OpenCV中将MAT类型的对象作为InputArray类型的对像传递给函数的主要内容,如果未能解决你的问题,请参考以下文章
在YUV_420_888中将图像从Android发送到OpenCV Mat中的JNI的最有效方式
如何使用 C# 脚本在 Unity 中将 OpenCV Mat 转换为 Texture2D?