gpt4 book ai didi

c++ - opencv 如何以高效的方式可视化非矩形区域 (roi)

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:12 25 4
gpt4 key购买 nike

我有一个图像 (cv::Mat) 和一个可以看作掩码的 ROI。我想显示混合了 ROI 的原始图像。

我的蒙版比我的原始图像小:每个元素代表图像中的一个 block 。假设我的面具是这样的(注意我的面具不是矩形)

0  0  1
1 1 1
0 0 0

然后我想让 (mask == 1) 的部分保持不变,其余部分与颜色混合。这是我的代码

cv::Mat blocks = image.clone;
uint npixcol = 32;
uint npixrow = 32;
for (uint ri = 0; ri < 480; ++ri)
for (uint ci = 0; ci < 640; ++ci)
{
if (mask[ri * 640 + ci])
cv::rectangle(blocks, cv::Rect(ci * npixcol, ri * npixrow, npixcol, npixrow), cv::Scalar(0, 0, 0), CV_FILLED, 8, 0);
}
cv::addWeighted(image, 0.5, blocks, 0.5, 0, image, -1);

如果没有额外的“克隆”命令,我怎么能做到这一点,因为它的性能不是很好......

使它更清楚;这是我想要的示例(颜色并不重要)! enter image description here

最佳答案

你的面具颜色不变吗?假设蒙版与图像的尺寸相同(您可以轻松缩放它):-

//Manually instead of addWeighted()
for (uint ri = 0; ri < 480; ++ri)
for (uint ci = 0; ci < 640; ++ci)
{
if (mask[ri * 640 + ci])
{
image.at<uchar>(ri,ci) [0] = image.at<uchar>(ri,ci) [0] * weight_blue;
image.at<uchar>(ri,ci) [1] = image.at<uchar>(ri,ci) [1] * weight_green;
image.at<uchar>(ri,ci) [2] = image.at<uchar>(ri,ci) [2] * weight_red;
}

}

关于c++ - opencv 如何以高效的方式可视化非矩形区域 (roi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22472762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com