繁体   English   中英

OpenCV C# 迭代 Mat object 喜欢 C++

[英]OpenCV C# iterate Mat object like C++

我正在尝试按照 OpenCV 的教程进行操作,该教程写在 C++ 中,但我需要将其写在 C# 中。到目前为止,它工作得很好。 因为我不是 C++ 开发人员,也不是。 熟悉我现在遇到的语言,我有点挣扎,我不确定我所做的是否等同于 C++ 版本。

这是C++中的代码

vector<Point> pointsOfInterest;
Mat_<uchar>::iterator itMask = mask.begin<uchar>();
Mat_<uchar>::iterator end = mask.end<uchar>();
for( ; itMask!=end; ++itMask)
    if(*itMask==255)
        pointsOfInterest.push_back(itMask.pos());

我在这里读到的是一个循环,它遍历整个 Mat 并检查 position 处的值是否为 255,如果是,它将将该点添加到 pointsOfInterest 列表的末尾。

所以我想这意味着检查 Mat 中的每个 x,y 像素的值。 我在 C# 中的等效项如下所示:

List<Point> pointsOfInterest = new List<Point>();
for(int x = 0;x<mask.Cols;x++)
{
    for(int y=0;y<mask.Rows; y++)
    {
        if (mask.At<int>(x, y) == 255)
            pointsOfInterest.Add(new Point(x, y));
    }
}

但是我得到的结果并不像预期的那样,这就是为什么我想知道这部分是否真的正确? 有时 mask.At 也会抛出一个 NullPointer,这很奇怪。 我也想知道 C++ 只是迭代一个一维数组(我认为至少)同时 C# 需要二维。

有人可以确认它是一样的还是有人知道哪里出了问题需要调整?

我还发现更改 img.At(y,x) 的 x 和 y 将解决异常,您将获得列表中的分数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM