使用c++实现OpenCV绘制图形旋转矩形
程序员文章站
2022-06-24 20:10:24
目录功能函数// 绘制旋转矩形void drawrotatedrect(cv::mat mask,const cv::rotatedrect &rotatedrect,const cv::sc...
功能函数
// 绘制旋转矩形 void drawrotatedrect(cv::mat mask,const cv::rotatedrect &rotatedrect,const cv::scalar &color,int thickness, int linetype) { // 提取旋转矩形的四个角点 cv::point2f ps[4]; rotatedrect.points(ps); // 构建轮廓线 std::vector<std::vector<cv::point>> tmpcontours; // 创建一个inputarrayofarrays 类型的点集 std::vector<cv::point> contours; for (int i = 0; i != 4; ++i) { contours.emplace_back(cv::point2i(ps[i])); } tmpcontours.insert(tmpcontours.end(), contours); // 绘制轮廓,即旋转矩形 drawcontours(mask, tmpcontours, 0, color,thickness, linetype); // 填充mask }
测试代码
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; void drawrotatedrect(cv::mat mask, const cv::rotatedrect &rotatedrect, const cv::scalar &color,int thickness, int linetype); int main() { cv::mat src = imread("test.jpg"); cv::mat result = src.clone(); cv::rotatedrect rorect(cv::point(src.cols / 2, src.rows / 2), cv::size(1000, 800), 50); drawrotatedrect(result, rorect, cv::scalar(0, 255, 255), 5,16); imshow("original", src); imshow("result", result); waitkey(0); return 0; } // 绘制旋转矩形 void drawrotatedrect(cv::mat mask,const cv::rotatedrect &rotatedrect,const cv::scalar &color,int thickness, int linetype) { // 提取旋转矩形的四个角点 cv::point2f ps[4]; rotatedrect.points(ps); // 构建轮廓线 std::vector<std::vector<cv::point>> tmpcontours; // 创建一个inputarrayofarrays 类型的点集 std::vector<cv::point> contours; for (int i = 0; i != 4; ++i) { contours.emplace_back(cv::point2i(ps[i])); } tmpcontours.insert(tmpcontours.end(), contours); // 绘制轮廓,即旋转矩形 drawcontours(mask, tmpcontours, 0, color,thickness, linetype); // 填充mask }
测试效果
绘制旋转矩形首先需要得到旋转矩形的位置坐标,我经常配合cv::minarearect
函数使用;
得到坐标信息后,结合绘制轮廓线的drawcontours
函数,即可完成。
以上就是使用c++实现opencv绘制图形旋转矩形的详细内容,更多关于c++实现opencv绘制的资料请关注其它相关文章!