c++ mat赋值_Mat 的几种初始化和赋值方法

这几天用到了由cv::Point3f和std::vector到cv::Mat数据类型的转换。本质上就是换一下容器。今晚做个小总结。

由Point3f 到 Mat

有两种方法,一种使用cv::Mat_<:point3f>(),另一种是在声明时使用{}初始化。注意:第一种方法得到的Mat的数据类型的通道数不为1,需要使用reshape()函数,第二种方式得到的通道数为1。

由vector 到 Mat

比较简单的方法是在Mat声明时,使用{}初始化。或者使用cv::Mat(std::vector)进行赋值也可以。比较省心的是,OpenCV根据vector数据中的类型自动选择通道数与数据类型。

若为uchar, float, double, 则通道数则为1, 若为cv::Point2f, cv::Point3f,则通道数则为2, 3。

#include

#include

#include

int main()

{

//

// cv::Point --> cv::Mat 可以使用cv::Mat_<:point3f>, 或初始化时{}赋值

// vector --> cv:Mat 可以使用{}赋值

cv::Point3f v1(34.0f, 21.34f, 32.0f);

// 1. cv::Mat_<:point3f>

// 三种赋值方式可以实现由Point3f到Mat的转换, 但是通道数不是1

//cv::Mat m1 = cv::Mat_<:point3f>(v1);

cv::Mat m1{ cv::Mat_<:point3f>(v1) };

//cv::Mat_<


版权声明:本文为weixin_32589387原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。