C++ vector 實現動態大小的二維陣列
阿新 • • 發佈:2019-02-08
為什麼會寫這個文章呢?是因為最近做一個opencv相關的專案,涉及到儲存畫素座標,但是我並不知道畫素的數量,所以想建立一個二維陣列來動態儲存畫素的x,y座標。由書上的知識可知,C++中的二維陣列實質上是一維數組裡儲存的元素仍然是一維陣列,而且在定義的時候必須指定陣列的大小,很顯然無法滿足我們的需要。
經過查詢網上的資料,發現還有一種方法是利用new運算子建立動態陣列,但是並不好用。所以,嘗試使用二維vector類模板。如下是我的程式碼,做個記錄,以便日後檢視。
#include "stdafx.h" #include <vector> #include <iostream> #include <fstream> #include <opencv2\opencv.hpp> #include <opencv2\core\core.hpp> #include <opencv2\imgproc\imgproc.hpp> #include <opencv2\highgui\highgui.hpp> using namespace std; using namespace cv; int main(int argc, _TCHAR* argv[]) { //讀入圖片,注意圖片路徑 Mat src_image = imread("0_corrected_foreground.png", 1); int rows = src_image.rows;//表示影象畫素的行數,對應於影象座標的y軸 int cols = src_image.cols;//表示影象畫素的列數,對應於影象座標的x軸 vector<int> vec10;//用於存放i = rows座標 vector<int> vec11;//用於存放j < cols座標 vector<vector<int>> vec2; //圖片讀入成功與否判定 if (!src_image.data) { cout << "The image reading process is wrong!" << endl; //等待按鍵 system("pause"); return -1; } imshow("原始影象", src_image); ofstream savefile("results.txt",ios::out);//新建一個txt檔案 for (int i = 0; i < rows; i++)//雙層迴圈,遍歷影象的畫素點 { for (int j = 0; j < cols; j++) { int bin_val = src_image.at<uchar>(i, j); if (bin_val==255)//判斷,如果此畫素的灰度值是255,即白色的,儲存對應的座標。 { savefile << i << ", " << j << endl;//儲存到txt檔案中 vec10.push_back(i);//push_back賦值 vec11.push_back(j);//push_back賦值 } } } vec2.push_back(vec10);//將一維vector推入二維vector vec2.push_back(vec11);//將一維vector推入二維vector savefile.close();//txt檔案關閉,儲存 waitKey(); return 0; }
https://blog.csdn.net/liyuqian199695/article/details/63680514?locationNum=14
https://blog.csdn.net/abc8730866/article/details/62236040
https://blog.csdn.net/qq_20823641/article/details/51932798
https://blog.csdn.net/a819825294/article/details/52088732