如何在分析OpenCV图像时跳过遮罩
How to skip over mask in analysis of OpenCV image
我有一个掩码数组mask
我有两个图像F
和G
。我想对F
执行一些统计信息(其中一些可能是自定义的,因此我需要能够访问特定元素),并且仅对那些mask
为真的像素进行G
。
我可以遍历F
和G
,然后查看mask
的值,但遮罩功能非常自由,所以我真的只需要查看图像的 0.01%。在这种情况下,我将 99.99% 的时间花在 if
语句中,如果可能的话,我想尝试对这些操作进行矢量化(或者至少减少if
比较,因为它可能是实质性的)。
我的问题是 - 我如何有效地只查看G
F
mask
与真(或假......哪个在这里更有意义)?
正如所指出的,谈论对原始像素的矢量化操作是没有意义的,因为它们几乎肯定不会在内存中连续。
为了解释这一点,我使用double
的vector
来存储强度,然后在分析中使用这些连续变量。在下面的代码中,X
是我用作蒙版的图像,R
和G
是我想从中获取强度的单独图像。
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,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- 在本地网络中通过OpenCV(C++)实时流式传输图像
- 如何在 OpenCV 中将图像与另一个图像相关联
- 如何在 OpenCV c++ 中压缩 TIFF 格式的图像?
- OpenCV - 如何在灰度图像上应用 Kmeans?
- 阅读和处理图像(OpenCV/C )
- cv::findContours 正在修改源图像 OpenCV 2.3
- 将图像替换为更大尺寸的图像 (OpenCV)
- 显示像素值已更改的图像openCV
- 具有积分图像的快速模糊图像(OpenCV)
- 扫描图像OpenCV上的文档检测
- 使用cv::Mat图像(opencv)如何检测对象
- 写作和展示图像OpenCV
- 从文件夹中读取图像(OpenCV)
- 无法保存从网络摄像头捕获的图像(OpenCV 2.3 的 imwrite 编译错误)
- 旋转不变的多个模板出现在图像Opencv