在OpenCV的另一个图像绘制图像

问题描述 投票:27回答:4

是否有一个OpenCV的功能在另一个图像绘制的图像?我有Mat类型的一个大的图像。我有Mat型(5x7)的小图像。我想对在指定coordinates的大图像绘制这个小图像。

image opencv
4个回答
43
投票

使用Mat::rowRange()Mat::colRange()到指定区域,你想在目标Mat绘制。码:

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

结果如下:

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 )

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 )

37
投票

大图像中创建一个地区的利益,然后将小图像复制到区域:

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

如果你是某小图像适合大图像,然后你可以简单地这样做:

cv::Rect roi( cv::Point( originX, originY ), smallImage.size() );
smallImage.copyTo( bigImage( roi ) );

2
投票

下面是在OpenCV中的java版的解决方案

Rect roi= new Rect(originX,originY,smalImage.width(),smallImge.height());
smallImage.copyTo( new Mat(input,roi) );

0
投票
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();
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.