每次运行后,Mat ForEachAsByte 都有不同的像素数

问题描述

我有一个 Mat 8 位灰度图像,我试图在其中使用 ForEachAsInt16() 函数进行循环。

Mat 图像配置如下:

{Mat [ 642*190*CV_8UC1,IsContinuous=False,IsSubmatrix=True,Ptr=0x75c8cf8,Data=0xcce4481 ]}

此 Mat 是 720*1280*CV_8UC1 的较大图像的子矩阵

当我遍历这个 Mat 并尝试计算像素数时,代码每次都会返回不同数量的像素。有谁知道为什么会这样?

执行此操作的代码如下:

var ridgeImageRoi = new Mat(ridgeImage,new Rect(roi.MinPoint.X,roi.MinPoint.Y,roi.MaxPoint.X - roi.MinPoint.X,roi.MaxPoint.Y - roi.MinPoint.Y));
unsafe
{
    int pixelcounter = 0;
    ridgeImageRoi.ForEachAsByte((byte* pixel,int* position) =>
    {
        pixelcounter++;
    });
    Console.WriteLine(pixelcounter);
}

我期望输出为 642*190 = 121980

但相反,我得到了以下输出:

78791
69079
72792
71272
79689

这个输出每次都不同,但总是在 70000 左右。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)