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