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