2016-10-19 3 views
-1

Я хочу, чтобы нарисовать прямоугольник в OpenCV C++ с помощью этой функциинарисовать прямоугольник в OpenCV по

rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shift=0)

, но когда я использую его я столкнулся с некоторыми ошибками. Мой вопрос может кто-нибудь объяснить функцию с примером? Я нашел пример, но с другой функцией

rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0)

этот пример на второй функции

rectangle(image, pt2, pt1, Scalar(0, 255, 0), 2, 8, 0);

этой функции я понимаю, но первая функция Я перед проблемой в параметре Rect Я не знаю, как я могу это сделать?

Спасибо

+0

Какие ошибки вы получаете? –

ответ

2

Вот простой пример рисования предопределенного прямоугольник на изображении

using namespace cv; 

int main(){ 
Mat img=imread("myImage.jpg"); 

Rect r=Rect(10,20,40,60); 
//create a Rect with top-left vertex at (10,20), of width 40 and height 60 pixels. 

rectangle(img,r,Scalar(255,0,0),1,8,0); 
//draw the rect defined by r with line thickness 1 and Blue color 

imwrite("myImageWithRect.jpg",img); 


return 0; 
} 
+0

спасибо, например, но как рисовать прямоугольник на изображении. –

+0

У меня есть изображение, и я хочу нарисовать на нем прямоугольник этой функцией –

+0

, это пример демонстрации объекта Rect (x, y, w, h). Функция rectangle() используется для рисования Rect на изображении. Если у вас уже есть изображение, вы используете вызов rectangle(), как показано выше, чтобы нарисовать прямоугольник на нем. –

3

cv::rectangle функция, которая принимает два cv::Point «s принимает как верхний левый и нижний правый угол прямоугольника (pt1 и pt2 соответственно в documentation). Если этот прямоугольник используется с функцией cv::rectangle, которая принимает cv::Rect, вы получите тот же результат.

// just some valid rectangle arguments 
int x = 0; 
int y = 0; 
int width = 10; 
int height = 20; 
// our rectangle... 
cv::Rect rect(x, y, width, height); 
// and its top left corner... 
cv::Point pt1(x, y); 
// and its bottom right corner. 
cv::Point pt2(x + width, y + height); 
// These two calls... 
cv::rectangle(img, pt1, pt2, cv::Scalar(0, 255, 0)); 
// essentially do the same thing 
cv::rectangle(img, rect, cv::Scalar(0, 255, 0)) 
+0

Я сделал, как вы мне дали пример, но функция не нарисовала прямоугольник на изображении, а была нарисована на углу. вы хотите, чтобы я присоединился к моему коду, чтобы посмотреть? –

+0

Поскольку он стоит выше, верхний левый угол прямоугольника - верхний левый угол изображения. Может быть, вы можете каким-то образом разместить изображение, которое вы используете, или показать, что происходит не так? –

+0

/* Глобальные переменные */ CascadeClassifier pedestrians_cascade; Mat image1; int x = 0; int y = 0; int w = 10; int h = 20; INT основной() { \t // Load Face каскадный (.xml файл) \t pedestrians_cascade = CascadeClassifier ("hogcascade_pedestrians.xml"); \t // Прочтите изображения image5 = imread ("ped5.jpg"); \t Rect rect (x, y, w, h); \t std :: vector faces1; pedestrians_cascade.detectMultiScale (image1, faces1, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, размер (30, 30)); \t прямоугольник (image1, rect, cv :: Scalar (0, 255, 0)); \t imshow ("Window1", image1); \t waitKey (0); return 0; } –

Смежные вопросы