【OpenCV3】旋转矩形(cv::RotateRect)的绘制
生活随笔
收集整理的這篇文章主要介紹了
【OpenCV3】旋转矩形(cv::RotateRect)的绘制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在OpenCV3中的繪圖詳解中,我們詳細地介紹了opencv3中所支持的各種幾何形狀的繪制,其中矩形的繪制接口為cv::rectangle(),但是這個接口只能用于繪制正常矩形(即cv::Rect定義的矩形,長是水平,高是豎直),但不支持旋轉矩形(cv::RotateRect)的繪制。比如我們使用如下代碼,通過若干點來擬合橢圓(cv::fitEllipse()),擬合出的橢圓是以橢圓的外接矩形呈現的,這個橢圓的外接矩形就是一個旋轉矩形。
//創建一個用于繪制圖像的空白圖 cv::Mat image = cv::Mat::ones(480, 640, CV_8UC3);//設置藍色背景image.setTo(cv::Scalar(100, 0, 0));//輸入擬合點 std::vector<cv::Point> points;points.push_back(cv::Point(200, 240));points.push_back(cv::Point(300, 400));points.push_back(cv::Point(400, 360));points.push_back(cv::Point(500, 300));points.push_back(cv::Point(500, 200));points.push_back(cv::Point(300, 150));//將擬合點繪制到空白圖上 for (int i = 0; i < points.size(); i++){cv::circle(image, points[i], 5, cv::Scalar(0, 0, 255), 2, 8, 0);}//獲取擬合橢圓的外包圍矩形cv::RotatedRect rotate_rect = cv::fitEllipse(points);//繪制擬合橢圓cv::ellipse(image, rotate_rect, cv::Scalar(0, 255, 255), 2, 8);cv::imshow("image", image);cv::waitKey(0);
從代碼中可以看出,我們可以使用cv::ellipse()來繪制橢圓。但是,如果我們想將這個外接的旋轉矩形也繪制出來的話,該怎么操作?opencv中有沒有提供專門用于繪制旋轉矩形的函數?很遺憾,沒有。
下面介紹兩種種解決旋轉矩形的繪制問題的方案。
1、使用cv::line()逐條邊繪制
代碼如下:
//獲取旋轉矩形的四個頂點cv::Point2f* vertices = new cv::Point2f[4];rotate_rect.points(vertices);//逐條邊繪制for (int j = 0; j < 4; j++){cv::line(image, vertices[j], vertices[(j + 1) % 4], cv::Scalar(0, 255, 0));}
結果如下:
2、使用cv::drawContours()函數進行繪制
代碼如下:
//獲取旋轉矩形的四個頂點cv::Point2f* vertices = new cv::Point2f[4];rotate_rect.points(vertices);std::vector<cv::Point> contour;for (int i = 0; i < 4; i++){contour.push_back(vertices[i]);}std::vector<std::vector<cv::Point>> contours;contours.push_back(contour);cv::drawContours(image, contours, 0, cv::Scalar(255, 255, 0), 1);
結果如下:
2017.04.11
總結
以上是生活随笔為你收集整理的【OpenCV3】旋转矩形(cv::RotateRect)的绘制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【OpenCV3】棋盘格角点检测与绘制—
- 下一篇: 【OpenCV3】级联分类器目标检测——