OpenCV的Mat IplImage CvMat
在C++接口中许多都是适用Mat object,这些Objects可以随便向IplImage和CvMat通过简单的赋值进行转换,例如:
Mat I;
IplImage pI = I;
CvMat mI = I;
如果想进行指针转换会稍微复杂一点,需要调用IplImage和CvMat运算符得到指针,为了得到指针需要使用&符号:
Mat I;
IplImage* pI = &I.operator IplImage();
CvMat* mI = &I.operator CvMat();
C接口最大的缺点是需要程序员进行内存管理,当不需要使用的Objects时需要释放内存,在程序结束前确保这样做了,否则到导致内存泄漏。为了解决这个问题,OpenCV引入了智能指针,当object不再使用时就会自动释放。
为了使用智能指针,需要使用Ptr进行声明:
Ptr<IplImage> piI = &I.operator IplImage();
C数据结构转换为Mat Object,使用Mat的构造函数:
Mat K(piI), L;
L = Mat(pI);