0

我的问题很复杂:

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

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 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 个值的数量

ETC....

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

我尝试执行类似 next: 的操作int x = x + pixel[j++];,但结果有些问题 - 需要帮助!

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

13 6 10 4 3 4

我想用 next: 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模板。如果有匹配 - 在列表中写入已创建模板的变量(我需要获取一些模板的表格,这些模板从图片的顶部到底部成行),如果没有匹配 = 转到下一行。

征求你的意见?感谢您阅读到问题的结尾。

4

1 回答 1

0

类似的事情可能会有所帮助:

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;
}
于 2013-09-23T13:28:02.790 回答