Как вы, возможно, уже знаете, переменные C / C ++ int (short и short unsigned) часто хранятся в 16 битах, а массивы C / C ++ хранят свои элементы в последовательных позициях в оперативной памяти.
Это означает, чточто до тех пор, пока вы знаете адрес первого элемента массива и количество байтов на элемент, вы можете вручную перемещать массив, увеличивая значение указателя (которое является просто 64-битным числом).
Toответьте на ваш вопрос, они вручную увеличивают значение указателя, чтобы пересечь набор координат, используя указатели вместо позиций массива.Операции сдвига - это просто чрезмерно оптимизированные способы увеличения указателя на нужную величину (с точки зрения двоичного числа).
Я не буду обсуждать, почему они это делают или как это меняется между платформами икомпиляторы, но они, вероятно, думали, что это повысит производительность в этом конкретном алгоритме.
Переменная «shift» предназначена для простого изменения размера переменной «unsigned int», вероятно, в случае, если им нужно скомпилировать для разныхархитектуры, где этот тип переменной не хранится в 2 байтах.
Это никак не связано с преобразованием Хафа, и я бы не советовал использовать этот конкретный код для изучения Хафа, если вы не заинтересованы в участии в OpenCV.,В качестве альтернативы я рекомендую эту очень ясную реализацию Python .