c mat賦值 Mat 的幾種初始化和賦值方法

2021-10-13 07:58:16 字數 789 閱讀 4620

這幾天用到了由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_<

map初始化賦值的幾種方式

1.傳統方式mapmap new hashmap map.put key1 value1 map.put key1 value2 2.雙括號初始化 相較於第一種方法,效率會低一點maphashmap new hashmap 3.適合用在一些確定性的配置場景等 注 immutablemap不可變且最多...

Mat矩陣的初始化

在研究mat矩陣的初始化的時候,發現其不能像matx輕量級矩陣那樣,直接利用陣列來進行初始化,而是利用乙個內部的變數型別 scalar來進行初始化的。參考手冊中的建構函式如下所示 1 mat mat 2 mat mat int rows,int cols,int type 3 mat mat siz...

Mat矩陣的初始化

在研究mat矩陣的初始化的時候,發現其不能像matx輕量級矩陣那樣,直接利用陣列來進行初始化,而是利用乙個內部的變數型別 scalar來進行初始化的。參考手冊中的建構函式如下所示 1 mat mat 2 mat mat int rows,int cols,int type 3 mat mat siz...