OpenCV draw an image over another image

前端 未结 4 450
礼貌的吻别
礼貌的吻别 2020-12-07 21:06

Is there an OpenCV function to draw an image over another image? I have one big image of Mat type. And I have a small image of Mat type (5x7<

相关标签:
4条回答
  • Here is the solution in java version of openCV

    Rect roi= new Rect(originX,originY,smalImage.width(),smallImge.height());
    smallImage.copyTo( new Mat(input,roi) );
    
    0 讨论(0)
  • 2020-12-07 21:28

    Create a Region Of Interest within the big image and then copy the small image to that region:

    cv::Rect roi( cv::Point( originX, originY ), cv::Size( width, height ));
    cv::Mat destinationROI = bigImage( roi );
    smallImage.copyTo( destinationROI );
    

    If you are certain the small image fits into the big image then you could simply do:

    cv::Rect roi( cv::Point( originX, originY ), smallImage.size() );
    smallImage.copyTo( bigImage( roi ) );
    
    0 讨论(0)
  • 2020-12-07 21:35

    Use Mat::rowRange() and Mat::colRange() to specify the area to which you want to draw in the destination Mat. Code:

    Mat src( 5,  7, CV_8UC1, Scalar(1)); // 5x7
    Mat dst(10, 10, CV_8UC1, Scalar(0)); // 10x10
    
    src.copyTo(dst.rowRange(1, 6).colRange(3, 10));
    

    Results in the following:

    before copyTo():

    dst:
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
    

    after copyTo():

    dst:
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 1 1 1 1 1 1 1 )
        ( 0 0 0 1 1 1 1 1 1 1 )
        ( 0 0 0 1 1 1 1 1 1 1 )
        ( 0 0 0 1 1 1 1 1 1 1 )
        ( 0 0 0 1 1 1 1 1 1 1 )
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
        ( 0 0 0 0 0 0 0 0 0 0 )
    
    0 讨论(0)
  • 2020-12-07 21:35
    void zoomImage(Mat &src, Mat &dst, int scale_percent)
    {
    
        //# percent of original size
        int width = int(src.cols * scale_percent / 100);
        int height = int(src.rows * scale_percent / 100);
        Size dim = Size(width, height);
        //pyrUp(tmp, dst, Size(tmp.cols * 2, tmp.rows * 2));
        resize(src, dst, dim, 0.0, 0.0, INTER_CUBIC);
    
        if (scale_percent < 100)
        {
    
            Mat srcR =Mat::zeros(Size(640,480),src.type()) ;
            int rstart = (src.rows - height) / 2;
            int rend = height;
            int cstart = (src.cols - width) / 2;
            int cend = width;
            dst.copyTo(srcR.rowRange( rstart, dst.rows+ rstart).colRange(cstart,dst.cols+ cstart));
            dst = srcR.clone();
    
        }
        else
        {
            Mat  ROI(dst, Rect((width - src.cols) / 2, (height - src.rows) / 2, src.cols, src.rows));
              dst = ROI.clone();
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题