Luonic
@Luonic
Студент, Unity3d, DotNet, Xamarin

Какой тип нужно указать в mat.at для чтения всех каналов в CV_16SC2?

Тип для меня этот (CV_16SC2) довольно специфичен и нов, я не понимаю, какой размер имеет один пиксел двухканальной матрицы.
Здесь мне хочется использовать именно mat.at, а не ходить по указателю, место не требующее большой скорости.
Следующий код дает такой вывод:
coord_mat = Mat::ones(img.size[0], img.size[1], CV_16SC2);
for (int y = 0; y < img.size[0]; ++y) {
    for (int x = 0; x < img.size[1]; ++x) {
        cout << coord_mat.at<Vec2s>(Point(x,y)) << " " << y << " " << x << endl;
    }
}


Числа в скобках - это значения первого и второго каналов пикселя, следующие 2 числа - ряд и колонка
[1, 0] 0 0
[1, 0] 0 1
[1, 0] 0 2
[1, 0] 0 3
[1, 0] 0 4
[1, 0] 0 5
[1, 0] 0 6
[1, 0] 0 7
[1, 0] 0 8
[1, 0] 0 9
[1, 0] 0 10
[1, 0] 0 11
[1, 0] 0 12
[1, 0] 0 13
[1, 0] 0 14
[1, 0] 0 15
[1, 0] 0 16
[1, 0] 0 17
[1, 0] 0 18
[1, 0] 0 19
[1, 0] 0 20
[1, 0] 0 21
[1, 0] 0 22
[1, 0] 0 23
[1, 0] 0 24

Наглядно видно, что тип не верный, так как в квадратных скобках должно было быть [1, 1].
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 1
@D3Nd3R
Если вы используете VS, то установите плагин image watch. И посмотрите, что реально содержит конкретный пиксель.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы