#c #image
#c #изображение
Вопрос:
Я наткнулся на этот пример кода в библиотеке OpenCV. Что делает строка p [j] = table[p[j]]? Я сталкивался с многомерными массивами, но раньше не сталкивался с чем-то подобным.
Matamp; ScanImageAndReduceC(Matamp; I, const uchar* const table)
{
// accept only char type matrices
CV_Assert(I.depth() == CV_8U);
int channels = I.channels();
int nRows = I.rows;
int nCols = I.cols * channels;
if (I.isContinuous())
{
nCols *= nRows;
nRows = 1;
}
int i,j;
uchar* p;
for( i = 0; i < nRows; i)
{
p = I.ptr<uchar>(i);
for ( j = 0; j < nCols; j)
{
p[j] = table[p[j]];
}
}
return I;
}
Комментарии:
1. Это зависит от того, что
I.ptr<uchar>(i)
делается. Возможно, это использует его в качестве поискового значения индекса вtable
.
Ответ №1:
Он выполняет замену цвета с использованием таблицы, где интенсивность каждого пикселя соответствует некоторому другому значению. Обычно используется для таких методов, как цветокоррекция, настройка гистограммы или даже пороговое значение.
Здесь таблица содержит значения символов без знака и индексируется по значению пикселя. Интенсивность пикселя p[i]
используется в качестве индекса в таблице, и значение этого индекса затем записывается в этот пиксель, заменяя его исходное значение.
Ответ №2:
Это преобразование таблицы подстановки.
Пиксели изображения (I) будут преобразованы с помощью таблицы. Например, пиксель со значением 100 будет изменен на 10, если таблица [100] = 10.
Ваш пример кода представлен в руководстве по OpenCV, в котором хорошо объясняется, что делает код.
https://docs.opencv.org/master/db/da5/tutorial_how_to_scan_images.html