Строки компиляции Mat с последовательностью шаблонов (c ++, Opencv)

Мой вопрос сложный:

У меня есть пороговая картинка образ. Чем пройти через пиксели:

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 до изменения значения пикселя

так далее….

Я думаю использовать следующий алгоритм: проверьте, является ли значение следующего пикселя строки таким же, как текущее значение. Если «да» — суммируйте это значение со следующим, если «нет» = обнуляйте и снова суммируйте до следующего изменения значения.

Я пытаюсь сделать что-то вроде следующего: 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 шаблон.
Если есть совпадение — пиши переменная основанный шаблон в списке (мне нужно получить таблицу некоторых шаблоны что встретить в строках сверху вниз на рисунке), если нет совпадения = перейти к следующей строке.

Спросите ваши советы?
Спасибо что прочитали до конца вопрос.

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;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector