OpenCV簡單畫點方法
阿新 • • 發佈:2019-02-19
opencv中的繪圖函式裡面有畫線畫矩形畫圓的函式,但是居然沒有畫點的函式。
在網上查了一下很多人都是用line或者circle來畫點,但是實際上有更簡單高效的方法——直接訪問Mat類的畫素點資訊。
由於平常處理的都是二維影象,很少超過3維,所以cv::Mat中的at方法過載了有2個int引數的版本,用於訪問某個畫素點的RGB資訊。
下面是一個舉例:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <fstream> #include <vector> using namespace std; using namespace cv; int main( void ) { const int VERTEX_NUM = 1325; /// Windows names char freq_window[] = "freq"; /// Create black empty images Mat freq_image = Mat::zeros( VERTEX_NUM, VERTEX_NUM, CV_8UC3 ); ifstream log( "swap[20131230Mon155037].log" ); vector< vector<int> > mat( VERTEX_NUM, vector<int>( VERTEX_NUM, 0 ) ); int oldc, newc; char tmp; while (!log.eof( )) { log >> oldc >> tmp >> newc; mat[oldc][newc]++; freq_image.at<Vec3b>( oldc, newc ) = Vec3b( mat[oldc][newc], 255, 0 ); //(freq_image.at<Vec3b>( oldc, newc ))[0]++; // another way to operate waitKey( 1 ); imshow( freq_window, freq_image ); } imshow( freq_window, freq_image ); log.close( ); waitKey(); return 0; }