使用模板序列(c++,Opencv)编译Mat行

Compile Mat rows with template sequence (c++, Opencv)

本文关键字:Opencv 编译 Mat c++      更新时间:2023-10-16

我的问题很复杂:

我有阈值图片图像。比通过像素:

for (i=0; i<image.rows; ++i)
    {
        pixel = image.ptr<uchar>(i);
        for (j=0; j<image.cols; ++j)
        {
            int p = pixel[j];

排队,例如,下一个序列:

0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255

0 0 0 255 255 255 255

;

我需要计算与当前值相同的每个值的数量if (p == pixel[j++])并查看:

               13 6 10 4 3 4

哪里:

13 = 像素值更改前

的数量为 0

6 = 像素值变化前 255 个值的数量

10 = 像素值更改前下一个 0 的数量

4 = 像素值变化前 255 个值的数量

3 = 像素值更改前下一个 0 的数量

4 = 像素值变化前 255 个值的数量

等。。。。

我认为使用下一个算法:检查,行的下一个像素值是否与当前值相同。如果"是" - 将此值与 next 求和,如果"否"= 重置为零并在下一个值更改之前再次求和。

我尝试做类似下一步的事情:int x = x + pixel[j++];,但结果有些不行 - 需要帮助!

比我需要在行中找到模板序列:

13 6 10 4 3 4

我想用下一个减去当前值:13-6、6-10、10-4、4-3、3-4 并获得正值或负值的结果。如果"TRUE",例如 - 分配"1",如果"FALSE"=分配"2",则得到数字,例如

1 2 1 1 2(我的样品的结果行(

在我看来,这是在任何图像维度中都是恒定的序列。

现在我需要找到这一行中是否有序列模板之一?

例如,我有一些独特的模板:

1 2 2,  2 2 1, 1 1 1, 2 1 1

我需要找到,什么模板在结果行中满足...它是2 1 1模板。如果有匹配 - 在列表中写入已建立模板的变量(我需要获取一些从图片顶部到底部的行遇的模板的表格(,如果没有匹配=转到下一

征求您的建议?谢谢你读到问题的最后。

这样的事情可能会有所帮助:

std::vector<int> getConsecutiveElementCount(const std::vector<int>& input)
{
    std::vector<int> res;
    if (input.empty()) {
        return res;
    }
    int count = 0;
    auto last = input[0];
    for (const auto& elem : input) {
        if (elem == last) {
            ++count;
        } else {
            res.push_back(count);
            last = elem;
            count = 1;
        }
    }
    res.push_back(count);
    return res;
}