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

vit*_*aly 28 opencv image

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

Era*_*n W 44

使用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));
Run Code Online (Sandbox Code Playgroud)

结果如下:

之前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 )
Run Code Online (Sandbox Code Playgroud)

之后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 )
Run Code Online (Sandbox Code Playgroud)

  • `a.copyTo(big.colRange(51,55).rowRange.(63,69))`for`5x7` (2认同)
  • 我已经编辑了完整的内容,因此它变得更加清晰,因为此答案存在多个问题:索引不正确(@NiksonKantiPaul发布的索引在范围大小上都太小1),rowRange和colRange被交换了,并且存在另一个语法问题。现在应该做得很好。 (2认同)

Rod*_*igo 37

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

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

如果您确定小图像适合大图像,那么您可以简单地执行:

cv::Rect roi( cv::Point( originX, originY ), smallImage.size() );
smallImage.copyTo( bigImage( roi ) );
Run Code Online (Sandbox Code Playgroud)

  • 遗憾的是,这对我来说似乎不起作用,我得到错误:`错误:没有匹配函数来调用'cv :: Mat :: copyTo(cv :: Mat)'.它提供了接收cv :: OutputArray的候选者,当我查看http://opencv.willowgarage.com/documentation/cpp/basic_structures.html#cv-mat-copyto它似乎确实把Mat作为一个参数,但我得到这个错误? (2认同)

J.E*_*zyk 5

这是java版本openCV中的解决方案

Rect roi= new Rect(originX,originY,smalImage.width(),smallImge.height());
smallImage.copyTo( new Mat(input,roi) );
Run Code Online (Sandbox Code Playgroud)