gpt4 book ai didi

c# - Cv2.CountNonZero返回意外结果

转载 作者:行者123 更新时间:2023-12-02 17:22:32 32 4
gpt4 key购买 nike

我在C#中使用OpenCvSharp库进行一些与OpenCV相关的计算。

给定一些图像,我想像this tutorial一样堆叠它们,然后计算帧和结果图像中的非零像素。这些数字将用于检测重叠,并确定另一个值。

我得到了3张图像,第0帧,第1帧和结果:

enter image description here

结果图像的内容确实是帧0 +帧1,在这种情况下,不重叠任何内容,因此非零像素的计数应满足c_r = c_f0 + c_f1,其中c_f0 = 356,c_f1 = 362。 c_r是530。可能是什么原因?

我正在使用相同的方法来显示,保存,计算图像上的计数:

Cv2.CvtColor(inputImage, gray, ColorConversionCodes.RGB2GRAY);
var pixels = Cv2.CountNonZero(gray);
Console.WriteLine(pixels);
Cv2.ImWrite(fileName, gray);
Cv2.ImShow("i", gray);
Cv2.WaitKey();

由于 gray是新创建的图像,因此其基础引用不会有问题(否则我看不到/保存真实图像)。为什么 Cv2.CountNonZero(gray);给我这个结果?

最佳答案

对此现象的一种可能解释是:由于您的图像不是严格的二进制图像(仅具有0和255值的图像),因此可能会有一些像素值看起来是黑色但不完全为零。让我们用一个例子来解释一下。假设我们有一个3x1灰度矩阵,其值是[255, 1, 0]。因此,从视觉上看,它似乎只有一个白色像素,而所有其他黑色像素。

现在,让我们再举一个具有两个矩阵的示例:Matrix1:[255, 1, 0]和Matrix2:[0, 1, 255],当我们将两个矩阵相加时,我们得到:[255, 2, 255]。现在,我们计算上述矩阵中的零像素:

cv2.countNonZero(matrix_1) = 2
cv2.countNonZero(matrix_2) = 2
cv2.countNonZero(matrix_1_2) = 3

现在,您可以看到 cv2.countNonZero(matrix_1) + cv2.countNonZero(matrix_2) != cv2.countNonZero(matrix_1_2)

关于c# - Cv2.CountNonZero返回意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61499196/

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