Насколько я понимаю, вы хотите измерить расстояние/сходство между двумя пикселями Vec3b. Это может быть отражено в общей задаче нахождения расстояния между двумя векторами в n-математическом пространстве.
Одна из известных мер (и я думаю, что это то, о чем вы просите), является евклидовым расстоянием.
Если вы используете OpenCV, то вы можете просто использовать:
cv::Vec3b a(1, 1, 1);
cv::Vec3b b(5, 5, 5);
double dist = cv::norm(a, b, CV_L2);
Вы можете обратиться к this для чтения о сорте :: нормы и ее вариантов.
Редактирование: Если вы делаете это для измерения сходства цветов, рекомендуется использовать цветовое пространство LAB, поскольку доказано, что евклидово расстояние в пространстве LAB является хорошим приближением для восприятия цветов людьми.
Edit 2: Я понимаю, что вы имеете в виду, для этого вы можете получить величину каждого вектора, а затем сравнить их, что-то вроде этого:
double a_magnitude = cv::norm(a, CV_L2);
double b_magnitude = cv::norm(b, CV_L2);
if(a_magnitude > b_magnitude)
// do something
else
// do something else.
Да, вы должны сравнить 3 канала отдельно. –
_intensity_ - это одно значение (и поэтому ваша матрица является одноканальной), а не триггером BGR. Итак, что вы хотите сравнить? – Miki
Я хочу сравнить интенсивность, представленную CV_8UC3. – Franktrt