簡體   English   中英

在 C++ 中修改 cv::Mat 內的 cv::Rect

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM