[英]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.