[英]Modifying a cv::Rect inside a cv::Mat in C++
我对openCV很陌生,想问一个看似简单的问题。
我有一个cv::Mat
形式的图像,我只想更改矩阵的一小部分。 我读过使用cv::Rect
是正确的方法,但我似乎无法找到一种方法来只修改那个小 ROI。
这是代码:
cv::Mat img = cv::Mat::zeros(msg->height, msg->width, CV_64FC1);
cv::Rect rect(100, 100, 20, 50);
我想要做的就是对rect
进行线性变换并将其添加到 img 的同一部分。
就像是:
int a=0.1, b=20;
rect = rect*a + b;
提前致谢。
OpenCV 的cv::Mat
有一个构造函数,它创建一个引用另一个图像的 ROI 图像:
cv::Mat::Mat(const Mat & m, const Rect & roi)
使用此构造函数将导致新的cv::Mat
与原始的共享数据:
这些构造函数不会复制任何数据。 相反,指向 m 个数据或其子数组的标头被构造并与之关联。
引用计数器(如果有)会递增。 因此,当您修改使用这样的构造函数形成的矩阵时,您也修改了 m 的相应元素。
您也可以使用operator()
:
Mat cv::Mat::operator() (const Rect & roi) const
在您的情况下,您可以执行以下操作:
#include <opencv2/core/core.hpp>
int main()
{
int h = 320;
int w = 640;
cv::Mat img = cv::Mat::ones(h, w, CV_64FC1);
cv::Rect rect(100, 100, 20, 50);
cv::Mat roi(img, rect); // alternatively you can use: cv::Mat roi = img(rect);
double a = 0.1;
double b = 20;
roi = roi * a + b; // this will modify the relevant area in img
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.