qq_24076833 2020-07-25 19:06 采纳率: 0%
浏览 2428

c++ opencv中Mat(Rect())返回的是ROI区域的引用还是拷贝?

如下:直接给m的左上角2*2区域赋值是不行的

#include <opencv.hpp>
using namespace cv;
int main() {
    Mat m = Mat(Size(3, 3), CV_8U,Scalar(0));
    Mat rect = Mat(Size(2,2), CV_8U,Scalar(99));
    m(Rect(0, 0, 2, 2)) =rect;
    std::cout << m << std::endl;
}

图片说明

因此,猜测m(Rect(0,0,2,2))只是传出左上角区域的拷贝,并没有把引用传出来,但是把m(Rect(0,0,2,2))=rect;改成m(Rect(0,0,2,2)+=rect;之后就可以赋值成功,所以我想问下Mat(Rect())到底是怎么操作的?
图片说明

  • 写回答

3条回答 默认 最新

  • 泡视界 2020-07-27 17:55
    关注

    mat是一个类,直接=,可能会取到地址。
    除非opencv中对=重载,重载为成员变量的拷贝,不然应该是会取到对象的地址的。
    +=应该有重载

    评论

报告相同问题?