1

Я использую OpenCV4Android version 2.4.11. Я читаю кадры с камеры, и я обнаруживаю любые прямоугольные фигуры в кадре. Затем я пытаюсь нарисовать полупрозрачный прямоугольник вокруг обнаруженного объекта.Как нарисовать прямоугольник, указав его 4 угла

что я хочу сделать, нарисовать полупрозрачный прямоугольник, учитывая четыре угла обнаруженного объекта. Но в openCV вы можете нарисовать прямоугольник, spcifying только две точки его «topLeft и BottomRight».

, пожалуйста, дайте мне знать, как нарисовать прямоугольник, отбросив четыре его угла НЕ ТОЛЬКО, spcifying углы topLeft и BottomRight.

ниже размещены изображения, чтобы показать вам мои попытки и показать вам, что я хочу, чтобы нарисовать прямоугольник вокруг четырех обнаруженных углов «красный, зеленый, синий, белый»

изображение:

enter image description here

+0

Вы должны нарисовать многоугольник, указав четыре точки. Посмотрите [здесь] (http://docs.opencv.org/2.4/doc/tutorials/core/basic_geometric_drawing/basic_geometric_drawing.html), есть раздел о рисовании полигонов – Klaus

+0

@Klaus, можете ли вы привести пример того, как нарисовать многоугольник? Я поступил в Google, но что касается java API для opencv, мне нужно скрыть список matOfPoints, пока у меня есть только точка углов. – user2121

+0

. Однако я не могу понять вашу проблему [здесь] (http://stackoverflow.com/questions/9082204/opencv-draw-a-white-fill-polygon) является ссылкой на аналогичный вопрос о SO. Посмотрите на вопрос не на ответ, разница в том, что в ответе он делает какой-то перевод с точками, которые, я полагаю, вам не нужны. – Klaus

ответ

1

OpenCV не обеспечивает функцию прямоугольник рисования, но вы можете создать верхний левый угол и нижний правый точки, используя 4 точки, которые вы вычисленных:

Предположим, что ваши 4 балла - (tlx,tly),(trx,try),(blx,bly) и (brx,bry), где tl - верхний левый, а br внизу справа.

Тогда вы можете рассчитать:

x1=min(tlx,trx,brx,blx);//top-left pt. is the leftmost of the 4 points 
x2=max(tlx,trx,brx,blx);//bottom-right pt. is the rightmost of the 4 points 
y1=min(tly,try,bry,bly);//top-left pt. is the uppermost of the 4 points 
y2=max(tly,try,bry,bly);//bottom-right pt. is the lowermost of the 4 points 

Это при условии, что точка (0,0) происходит в верхнем левом углу. Теперь вы можете использовать:

rectangle(src, Point(x1,y1), Point(x2,y2),Color,Thickness,other_params); 
0

Та же самая идея, как @Saransh, но компилирует для меня:

auto x1 = std::min(tlx, std::min(trx, std::min(brx, blx))); // top-left pt. is the leftmost of the 4 points 
auto x2 = std::max(tlx, std::max(trx, std::max(brx, blx))); // bottom-right pt. is the rightmost of the 4 points 
auto y1 = std::min(tly, std::min(try, std::min(bry, bly))); //top-left pt. is the uppermost of the 4 points 
auto y2 = std::max(tly, std::max(try, std::max(bry, bly))); //bottom-right pt. is the lowermost of the 4 points 
Смежные вопросы