日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【 C++ OpenCV画旋转矩形 并返回四个顶点 】

發(fā)布時(shí)間:2023/12/16 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【 C++ OpenCV画旋转矩形 并返回四个顶点 】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C++ OpenCV畫旋轉(zhuǎn)矩形 并返回四個(gè)頂點(diǎn)

  • 函數(shù) rectangle2
    • 說明
    • 代碼

函數(shù) rectangle2

說明

通過矩形中心點(diǎn)和角度,在圖像上找到旋轉(zhuǎn)矩形的四個(gè)角點(diǎn)

int rectangle2(Mat& src,vector& out_points, Point2f center, double angle, double w_length,double h_length, Scalar color, int thickness)
參數(shù):
Mat& src 輸入并輸出圖片
vector& out_points 得到四個(gè)點(diǎn)
Point2f center 矩形中心點(diǎn)
double angle 矩形角度
double w_length 矩形寬的一半
double h_length 矩形長的一半
Scalar color 顏色
int thickness 線寬 -1為填充**

代碼

int rectangle2(Mat& src,vector<Point2f>& out_points, Point2f center, double angle, double w_length,double h_length, Scalar color, int thickness)Mat& src 輸入并輸出圖片vector<Point2f>& out_points 得到四個(gè)點(diǎn)Point2f center 矩形中心點(diǎn)double angle 矩形角度double w_length 矩形寬的一半double h_length 矩形長的一半Scalar color 顏色int thickness 線寬 -1為填充** int rectangle2(Mat& src,vector<Point2f>& out_points, Point2f center, double angle, double w_length,double h_length, Scalar color, int thickness) {if (src.empty())return -1;angle = -angle;vector<Point2f> before_points(4),later_points(4);double cosA = cos(angle / (180.0 / CV_PI));double sinA = sin(angle / (180.0 / CV_PI));//左上,右上,右下,左下before_points[0] = Point(center.x - w_length, center.y - h_length);before_points[1] = Point(center.x + w_length, center.y - h_length);before_points[2] = Point(center.x + w_length, center.y + h_length);before_points[3] = Point(center.x - w_length, center.y + h_length);//帶角度的矩形四角點(diǎn)later_points[0].x = (before_points[0].x - center.x) * cosA - (before_points[0].y - center.y) * sinA + center.x;later_points[0].y = (before_points[0].x - center.x) * sinA + (before_points[0].y - center.y) * cosA + center.y;later_points[1].x = (before_points[1].x - center.x) * cosA - (before_points[1].y - center.y) * sinA + center.x;later_points[1].y = (before_points[1].x - center.x) * sinA + (before_points[1].y - center.y) * cosA + center.y;later_points[2].x = (before_points[2].x - center.x) * cosA - (before_points[2].y - center.y) * sinA + center.x;later_points[2].y = (before_points[2].x - center.x) * sinA + (before_points[2].y - center.y) * cosA + center.y;later_points[3].x = (before_points[3].x - center.x) * cosA - (before_points[3].y - center.y) * sinA + center.x;later_points[3].y = (before_points[3].x - center.x) * sinA + (before_points[3].y - center.y) * cosA + center.y;int thicknes = thickness;if (thickness == -1)thicknes = 1;line(src, later_points[0], later_points[1], color, thicknes);line(src, later_points[1], later_points[2], color, thicknes);line(src, later_points[2], later_points[3], color, thicknes);line(src, later_points[3], later_points[0], color, thicknes);out_points = later_points;if (thickness == -1){Mat mask = Mat::zeros(src.size(), CV_8U);line(mask, later_points[0], later_points[1], Scalar(255), thicknes);line(mask, later_points[1], later_points[2], Scalar(255), thicknes);line(mask, later_points[2], later_points[3], Scalar(255), thicknes);line(mask, later_points[3], later_points[0], Scalar(255), thicknes);vector<vector<Point>> contours;vector<Vec4i> hierarchy;findContours(mask, contours, hierarchy, RETR_TREE, CHAIN_APPROX_NONE);drawContours(src, contours, 0, color, -1);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的【 C++ OpenCV画旋转矩形 并返回四个顶点 】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。