1. 程式人生 > >OpenCV簡單畫點方法

OpenCV簡單畫點方法

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;
}