zoukankan      html  css  js  c++  java
  • Mat 和 CvMat,IplImage相互转化

    The section is just a summary “cheatsheet” of common things you may want to do with cv::Mat:. The code snippets below all assume the correct
    namespace is used:
    using
     namespace
     cv
    ;
    
    using namespace std ;

    Convert an IplImage or CvMat to an cv::Mat and a cv::Mat to an IplImage or CvMat:

    // Assuming somewhere IplImage *iplimg; exists
    
    // and has been allocated and cv::Mat Mimg has been defined
    Mat imgMat ( iplimg ); //Construct an Mat image "img" out of an IplImage
    Mimg = iplimg ; //Or just set the header of pre existing cv::Mat
    //Ming to iplimg's data (no copying is done)

    //Convert to IplImage or CvMat, no data copying
    IplImage ipl_img = img ;
    CvMat cvmat = img ; // convert cv::Mat -> CvMat

    A very simple way to operate on a rectanglular sub-region of an image (ROI – “Region of Interest”):

    //Make a rectangle
    
    Rect roi ( 10 , 20 , 100 , 50 );
    //Point a cv::Mat header at it (no allocation is done)
    Mat image_roi = image ( roi );

    A bit advanced, but should you want efficiently to sample from a circular region in an image (below, instead of sampling, we just draw into a BGR image) :

    // the function returns x boundary coordinates of
    
    // the circle for each y. RxV[y1] = x1 means that
    // when y=y1, -x1 <=x<=x1 is inside the circle
    void getCircularROI ( int R , vector < int > & RxV )
    {
    RxV . resize ( R + 1 );
    for ( int y = 0 ; y <= R ; y ++ )
    RxV [ y ] = cvRound ( sqrt (( double ) R * R - y * y ));
    }

    // This draws a circle in the green channel
    // (note the "[1]" for a BGR" image,
    // blue and red channels are not modified),
    // but is really an example of how to *sample* from a circular region.
    void drawCircle ( Mat & image , int R , Point center )
    {
    vector < int > RxV ;
    getCircularROI ( R , RxV );

    Mat_ < Vec3b >& img = ( Mat_ < Vec3b >& ) image ; //3 channel pointer to image
    for ( int dy = - R ; dy <= R ; dy ++ )
    {
    int Rx = RxV [ abs ( dy )];
    for ( int dx = - Rx ; dx <= Rx ; dx ++ )
    img ( center . y + dy , center . x + dx )[ 1 ] = 255 ;
    }
    }
    出自:http://opencv.willowgarage.com/documentation/cpp/c++_cheatsheet.html
  • 相关阅读:
    软考知识点梳理--综合布线
    软考知识点梳理--典型应用集成技术
    软考知识点梳理--V型生命周期模型
    软考知识点梳理--人际沟通风格
    软考知识点梳理--沟通原则
    软考知识点梳理--项目建议书
    软考知识点梳理--版本管理
    软考知识点梳理--信息系统集成项目及特点
    软考知识点梳理--信息论
    软考知识点梳理--项目验收
  • 原文地址:https://www.cnblogs.com/wqvbjhc/p/2465142.html
Copyright © 2011-2022 走看看