我對openCV很陌生,想問一個看似簡單的問題。
我有一個 a 形式的影像,cv::Mat我只想更改矩陣的一小部分。我讀過使用 acv::Rect是正確的方法,但我似乎無法找到一種方法來只修改那個小投資回報率。
這是代碼:
cv::Mat img = cv::Mat::zeros(msg->height, msg->width, CV_64FC1);
cv::Rect rect(100, 100, 20, 50);
我要做的就是對 img 進行線性rect變換并將其添加到 img 的同一部分。
就像是:
int a=0.1, b=20;
rect = rect*a b;
提前致謝。
uj5u.com熱心網友回復:
OpenCVcv::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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/490888.html
下一篇:OpenCV在運行時限制FPS
