我编写了一个应用程序,它将视频帧捕获为 RGBA 格式,将其转换为 HSV(以便于阈值处理),然后对图像进行阈值处理。(基本上,在相机“看到”指定颜色的地方,它会将这些元素变成白色,如果没有,它会将这些元素变成黑色。)
我想做的是确定图像的百分比落在指定的颜色范围内。我最初的想法是扫描阈值垫的每个单独元素,并计算白色元素的数量以查看检测到颜色的位置。我有两个问题——首先,这是解决这个问题的有效方法吗?还是我错过了一些明显的东西?其次,我将如何访问 Mat 的元素(如果这是最有效的解决方案)?我已经查看了几个问题以及 Mat 文档,但这有点超出我的想象。
这是我现在用来确定图像中白色元素数量的伪代码。
// Loop through height
// Loop through width
// If Mat element (height, width) is white, add 1 to the total
// Compare total to the total number of elements in the image (height * width)
编辑:我找到了如何访问 Mat 的各个元素(我想多了,并且在我找到的教程中查看一些不相关的信息时让自己感到困惑。我在下面包括了如何做到这一点,但是我会欢迎任何关于更有效的方法的想法,或者我已经尽可能有效地这样做的知识,如果我是的话!谢谢!
for(int h=0; h<mHSVThreshed.height(); h++){
for(int w=0; w<mHSVThreshed.width(); w++) {
double element = mHSVThreshed.get(h, w)[0];
}
}
要访问具有多个通道的 Mat,您可以使用mHSV.get(h, w)[1] mHSV.get(h, w)[2]
etc.