c++中vector函數


std::vector <cv::Point> VectorPoints

說明:首先定義一個Point(即Point2i---二維整型的點)類型的變量VectorPoints,這就是我們創建的用來存儲Point類型的點的容器啦。<cv::Point>表示容器中所裝的數據的類型,double啊,int啊,各種都可以。之后,博主用二重循環給我們的容器裝數據:定義一個我們要裝的數據的類型的變量(這里叫myPoint),給這個變量賦值,然后調用vector變量的push_back函數(參數即為該類型數據)。我們就把這些數據裝入容器了。

#include <iostream>
#include <string>
#include <vector>
#include "opencv2/highgui/highgui.hpp"



int main()
{
	
	int i, j;
	std::vector <cv::Point> VectorPoints;
	for (i = 0; i<5; i++)
		for (j = 0; j<5; j++)
		{
			cv::Point myPoint = cv::Point(i, j);
			VectorPoints.push_back(myPoint);
		}

	for (i = 0; i<VectorPoints.size(); i++)
		std::cout << VectorPoints.at(i) << std::endl;
	system("pause");
	return 0;
}

我們可以用cout輸出數據來看看。用at我們可以輕易地訪問容器中的第i個元素(數據)。VectorPoints.at(i)有兩個變量x,y即為我們剛才復制的i,j。VectorPoints.at(i).x和VectorPoints.at(i).y直接可以得到某個Point類型數據的x、y元素。

 

函數的具體使用可參考:

https://zhuanlan.zhihu.com/p/45208774

https://blog.csdn.net/msdnwolaile/article/details/52708144

 說明:在OpenCV的繪制特征點和匹配點繪制及連線中,都反復地使用了KeyPoint這種數據類型,因此首先定義一個數據類型為KeyPoint的vector容器,名之keypoint_test。接着,我們給容器裝數據:KeyPoint比之Pont多了些參數,頭兩個參數分別是float型,第三個是繪制點的大小,再后就都是用的默認參數,博主還沒有深究,是對着下邊的features2d.hpp中的東西對着打的(后四個參數:-1,0 ,0,-1)。之后,如法炮制地調用函數push_back,我們就得到了裝載了數據的vector容器keypoint_test。接下來的繪制就簡單了。Mat型變量讀取圖像,再定義一個Mat性變量mat_show用於繪制。最后調用drawKeypoints,參數分別是:原始圖像,待繪制的數據keypoint_test,繪制所用的圖像,任意顏色,ID號(同一幅圖像相同)。這樣簡單幾步就大功告成啦。;

opencv3.x.的cv2.drawKeypoints()函數主要五個參數:

image:也就是原始圖片
keypoints:從原圖中獲得的關鍵點,這也是畫圖時所用到的數據
outputimage:輸出              //可以是原始圖片 
color:顏色設置,通過修改(b,g,r)的值,更改畫筆的顏色,b=藍色,g=綠色,r=紅色。
flags:繪圖功能的標識設置
flags的四個參數:

 cv2.DRAW_MATCHES_FLAGS_DEFAULT:創建輸出圖像矩陣,使用現存的輸出圖像繪制匹配對和特征點,對每一個關鍵點只繪制中間點

 cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:不創建輸出圖像矩陣,而是在輸出圖像上繪制匹配對

 cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:對每一個特征點繪制帶大小和方向的關鍵點圖形

 cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS:單點的特征點不被繪制 

#include <iostream>
#include <string>
#include <vector>
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/core/core.hpp>
#include <opencv2/xfeatures2d.hpp>  
#include <opencv2/xfeatures2d/nonfree.hpp>


using namespace cv;
using namespace std;

int main()
{
    

    vector<KeyPoint> keypoint_test;
    KeyPoint mykeypoint = KeyPoint(3, 3, 3, -1, 0, 0, -1);
    keypoint_test.push_back(mykeypoint);
    mykeypoint = KeyPoint(7, 7, 3, -1, 0, 0, -1);
    keypoint_test.push_back(mykeypoint);
    mykeypoint = KeyPoint(11, 11, 3, -1, 0, 0, -1);
    keypoint_test.push_back(mykeypoint);
    Mat mat_test = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\04.png");
    Mat mat_show;
    drawKeypoints(mat_test, keypoint_test, mat_show, Scalar::all(-1), 0);
    imshow("show", mat_test);
    imshow("show2", mat_show);

    waitKey();
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM