Кто-нибудь знает, как я могу рассчитать расстояние между синей точкой на верхней фигуре прямо до границы этой ниже?
У меня есть координаты точки.
Я пытался проверять цвет по точкам, пока он не достигнет белой части рисунка ниже, но он потребляет слишком много оборудования. (Я начинаю позицию Y с черной части, но я могу делать что-то не так …)
while(true){
p = pixelColor.ptr<Point3_<uchar> >( positionY, positionX);
if((p->z==255)&&(p->y==255)&&(p->x==255)){
cout<<"Found"<<endl;
break;
}
positionY++;
}
Вы можете использовать дихотомию, вы берете точку на половину высоты, если черный, вы работаете с нижней половиной, если белый — с верхней, то вы делаете то же самое и т. Д., Пока не сойдетесь. Это O(log2(height))
пока ваш O(height)
, Однако вы можете получить ошибки в зависимости от проблемы (например, столбцы с чередованием белого, черного, белого и черного цветов).
Вы также можете работать на одном канале.
Тем не менее, это довольно простой цикл: если он потребляет слишком много аппаратного обеспечения, вы не сможете делать многое из остальных.
Так как изображение редко имеет существенные изменения размером 1 пиксель, вы можете выбрать каждый n-й пиксель. Тем не менее, ваш код выглядит нормально, если есть проблемы со скоростью, проверьте утечки памяти или бесконечные циклы в других потоках.