Я пытаюсь получить доступ ко всем пикселям между двумя нелинеальными точками. Но я не мог этого сделать. Чтобы сказать, что это просто, с функцией cvLine я рисую линию между двумя точками, как показано на изображении ниже (я хочу получить доступ к пикселям вдоль зеленой линии между двумя красными точками).Как получить доступ ко всем пикселям между двумя нелинейными точками на изображении
Я попытался следующие:
Rect myROI(midPx, midPy, (edgPx-midPx), (midPy-edgPy)+1);
Mat croppedImage = mask(myROI);
Это не работает в моем случае.
Может ли кто-нибудь помочь мне решить эту проблему?
Извините, на самом деле я пробовал то же, что и в примере, это была ошибка при комментировании. Я попробовал оба метода из примера;
LineIterator it(mask, Point(midPx, midPy), Point(edgPx, edgPy), 8);
LineIterator it2 = it;
vector<Vec3b> buf(it.count);
//cout << buf<< endl;
for(int i = 0; i < it.count; i++, ++it)
{
buf[i] = *(const Vec3b)*it;
}
// alternative way of iterating through the line
//for(int i = 0; i < it2.count; i++, ++it2)
//{
// cout <<it2.pos()<<","<<val<< endl;
//buf.at<Vec3b>(Point(i,0)) = val;
//}
imshow("buf Image", buf);
но оставил с ошибкой в BUF [я]
erreur: no match for ‘operator*’ in ‘*cv::Vec<unsigned char, 3>(((const unsigned char*)it.cv::LineIterator::operator*()))
'Это не работает в моем случае.' - что не работает, каковы ошибки? –
с использованием Rect не является хорошим выбором, поскольку он рассматривает все пиксели внутри прямоугольника между двумя точками – KUMAR