1. 程式人生 > >opencv中的一些簡單函式和注意事項218/12/18-

opencv中的一些簡單函式和注意事項218/12/18-

①輸出當前opencv版本

printf("\n\n\t\t\t   當前使用的OpenCV版本為:" CV_VERSION );
//CV_VERSION 為當前版本巨集

②waitkey()函式

waitKey( 0 );//顯示視窗直到按下任意鍵;

③getTickCount()

計算執行時間並輸出
例項

	//【1】記錄起始時間
	double time0 = static_cast<double>(getTickCount());  
            //getTickCount記錄CPU自某個事件以來走過的週期數;
	//【2】執行程式碼
	。。。。。

	//【3】計算執行時間並輸出
	time0 = ((double)getTickCount() - time0)/getTickFrequency();
	        //getTickFrequency返回CPU一秒鐘走過的週期數;
	cout<<"此方法執行時間為: "<<time0<<"秒"<<endl;  //輸出執行時間

(1)eye()函式

例項

Mat I = Mat::eye(4, 4, CV_64F);
//#define CV_64F  6
I.at<double>(1,1) = CV_PI; 
//#define CV_PI   3.1415926535897932384626433832795
cout << "\nI = " << I << ";\n" << endl;

output

I = [1, 0, 0, 0;
  0, 3.141592653589793, 0, 0;
  0, 0, 1, 0;
  0, 0, 0, 1];

(2)Mat建構函式

例項1

    Mat r = Mat(2, 3, CV_8UC3);
	randu(r, Scalar::all(0), Scalar::all(255));

	//此段程式碼的OpenCV2版為:
	//cout << "r (OpenCV預設風格) = " << r << ";" << endl << endl;
	//cout << "r (Python風格) = " << format(r,"python") << ";" << endl << endl;
	//cout << "r (Numpy風格) = " << format(r,"numpy") << ";" << endl << endl;
	//cout << "r (逗號分隔風格) = " << format(r,"csv") << ";" << endl<< endl;
	//cout << "r (C語言風格) = " << format(r,"C") << ";" << endl << endl;
	//此段程式碼的OpenCV3版為:
	cout << "r (OpenCV預設風格) = " << r << ";" << endl << endl;
	cout << "r (Python風格) = " << format(r, "python") << ";" << endl << endl;
	cout << "r (Numpy風格) = " <<  format(r, "numpy" )<< ";" << endl << endl;
	cout << "r (逗號分隔風格) = " << format(r,"csv")<< ";" << endl<< endl;
	cout << "r (C語言風格) = " <<  format(r, "C" ) << ";" << endl << endl;

output在這裡插入圖片描述
例項2

// 建立空白的Mat影象
#define WINDOW_WIDTH 600     //定義視窗大小的巨集
Mat atomImage = Mat::zeros( WINDOW_WIDTH, WINDOW_WIDTH, CV_8UC3 );
Mat rookImage = Mat::zeros( WINDOW_WIDTH, WINDOW_WIDTH, CV_8UC3 );

(3)Point類

例項

    Point2f p(6, 2);
	cout << "【2維點】p = " << p << ";\n" << endl;

	Point3f p3f(8, 2, 0);
	cout << "【3維點】p3f = " << p3f << ";\n" << endl;

output
在這裡插入圖片描述

(4)vector類

	vector<float> v;
	v.push_back(3);
	v.push_back(5);
	v.push_back(7);

	cout << "【基於Mat的vector】shortvec = " << Mat(v) << ";\n"<<endl;

	vector<Point2f> points(8);
	for (size_t i = 0; i < points.size(); ++i)
		points[i] = Point2f((float)(i * 5), (float)(i % 7));

	cout << "【二維點向量】points = " << points<<";";
	getchar();//按任意鍵退出

output
在這裡插入圖片描述

MoveWindow()函式

函式功能:該函式改變指定視窗的位置和尺寸。對於頂層視窗,位置和尺寸是相對於螢幕的左上角的:對於子視窗,位置和尺寸是相對於父視窗客戶區的左上角座標的。
  函式原型:BOOL MoveWindow(HWND hWnd,int x.int y,int nWidth,int nHeight,BOOL bRePaint);

引數:
  hWnd:視窗控制代碼。
  x:指定視窗的新位置的左邊界。
  Y:指定視窗的新位置的頂部邊界。
  nWidth:指定視窗的新的寬度。
  nHaight:指定視窗的新的高度。
  bRepaint:確定視窗是否被重新整理。如果該引數為TRUE,視窗接收一個WM_PAINT訊息;如果引數為FALSE,不發生任何重新整理動作。它適用於客戶區,非客戶區(包括標題欄和滾動條),及由於移動子視窗而露出的父視窗的區域。如果引數為FALSE,應用程式就必須明確地使視窗無效或重畫該視窗和需要重新整理的父視窗。bRepaint是設定是否重畫視窗和父視窗。當設定為TRUE時,就進行重畫。當設定為FALSE時,就不進行重畫,需要手功進行更新指定的區域。
  返回值:如果函式成功,返回值為非零;如果函式失敗,返回值為零。若想獲得更多錯誤資訊,請呼叫GetLastError函式。