Image OpenCV在另一个图像上绘制图像

Image OpenCV在另一个图像上绘制图像,image,opencv,Image,Opencv,是否有OpenCV函数在另一个图像上绘制图像? 我有一张Mat类型的大图。 我有一个Mat类型的小图像(5x7)。 我想在指定的坐标处在大图像上绘制这个小图像,使用Mat::rowlange()和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,

是否有OpenCV函数在另一个图像上绘制图像? 我有一张
Mat
类型的大图。 我有一个
Mat
类型的小图像(
5x7
)。 我想在指定的
坐标

处在大图像上绘制这个小图像,使用
Mat::rowlange()
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()之前

copyTo()之后


在大图像中创建感兴趣的区域,然后将小图像复制到该区域:

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

以下是openCV的java版本中的解决方案

Rect roi= new Rect(originX,originY,smalImage.width(),smallImge.height());
smallImage.copyTo( new Mat(input,roi) );
void缩放图像(Mat&src、Mat&dst、int scale_百分数)
{
//#原始尺寸的百分比
int width=int(src.cols*比例百分比/100);
int高度=int(src.rows*比例百分比/100);
尺寸尺寸=尺寸(宽度、高度);
//pyrUp(tmp,dst,Size(tmp.cols*2,tmp.rows*2));
调整大小(src、dst、dim、0.0、0.0、单位间立方);
如果(比例百分比<100)
{
Mat srcR=Mat::zeros(大小(640480),src.type();
int rstart=(src.rows-height)/2;
int rend=高度;
int cstart=(src.cols-宽度)/2;
int cend=宽度;
copyTo(srcR.rowRange(rstart,dst.rows+rstart).colRange(cstart,dst.cols+cstart));
dst=srcR.clone();
}
其他的
{
Mat ROI(dst,Rect((宽度-src.cols)/2,(高度-src.rows)/2,src.cols,src.rows));
dst=ROI.clone();
}
}

a.copyTo(big.colRange(51,55).rowRange.(63,69))
对于
5x7
我编辑了完整的内容,因此它变得更清晰,因为这个答案存在多个问题:索引不正确(@NiksonKantiPaul发布的索引在范围大小上都太小了1),rowRange和colRange被交换,出现了另一个语法问题。现在应该很好了。请接受一些答案或者告诉他们为什么不起作用。尽量不要让这个地方成为开放式问题墓地。不幸的是,这似乎对我不起作用,我得到了错误:`error:no match函数用于调用'cv::Mat::copyTo(cv::Mat')。它提供了接收cv::OutputArray的候选者,当我看到它时,它似乎将Mat作为参数,但我得到了这个错误?
cv::Rect roi( cv::Point( originX, originY ), smallImage.size() );
smallImage.copyTo( bigImage( roi ) );
Rect roi= new Rect(originX,originY,smalImage.width(),smallImge.height());
smallImage.copyTo( new Mat(input,roi) );
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();
    }

}