gpt4 book ai didi

c++ - 如何在 OpenCV 图像分析中跳过掩码

转载 作者:太空宇宙 更新时间:2023-11-03 23:18:31 26 4
gpt4 key购买 nike

我有一个掩码数组 mask 和两个图像 FG。我想在 FG 上仅针对那些执行一些统计(其中一些可能是自定义的,因此我需要能够访问特定元素) mask 为真的像素。

我可以遍历 FG 然后查看 mask 的值,但是屏蔽函数非常自由,所以我真的只需要看我图像的 0.01%。在这种情况下,我将 99.99% 的时间花在 if 语句中,并且我想尽可能地尝试对这些操作进行矢量化(或者至少减少 if比较,因为它可能是实质性的)。

我的问题是 - 我如何才能有效地只查看 FG 中的那些像素,其中 mask 关联到 true(或 false) ... 哪个更有意义)?

最佳答案

正如所指出的,谈论对原始像素的矢量化操作毫无意义,因为它们几乎肯定不会在内存中连续。

为了解决这个问题,我使用 doublevector 来存储强度,然后在我的分析中使用这些连续的变量。在下面的代码中,X 是我用作 mask 的图像,RG 是我想要获取强度的单独图像来自。

cv::Mat locs;
cv::findNonZero(X, locs);

std::vector< double > Rs(locs.rows);
std::vector< double > Gs(locs.rows);

for(int ip = 0; ip < locs.rows; ip++) {
cv::Point p = locs.at<cv::Point>(ip);
Rs[ip] = ( (double)R.at<uchar>(p) );
Gs[ip] = ( (double)G.at<uchar>(p) );
}

然后我可以将这个子集传递给任何我想要的函数,如果我愿意的话,我可以以矢量化的方式处理数据:

double myValue = myFunction( Rs, Gs );

关于c++ - 如何在 OpenCV 图像分析中跳过掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35186383/

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