首页 > 解决方案 > 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 左右。

标签: c#opencv

解决方案


推荐阅读