目录
矩形 | cv::rectangle() |
圆 | cv::circle() |
椭圆 | cv::ellipse() |
线 | cv::line() |
随机数 | cv::RNG |
多边形 | cv::fillpoly() cv::polylines() |
画出轮廓 | cv::drawContours() |
1.几何形状
仔细看API就能懂~
#include<opencv2/opencv.hpp>
#include<iostream>
#include<imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat image = imread("C:/Users/YY/Pictures/Saved Pictures/frose.jpg");
//imshow("原图", image);
Mat src = Mat::zeros(512, 512, CV_8UC3);
//矩形
Rect rec1,rec2;
rec1.x = 100;
rec1.y = 100;
rec1.width = 100;
rec1.height = 50;
rec2.x = 300;
rec2.y = 100;
rec2.width = 100;
rec2.height = 50;
rectangle(src, rec1, Scalar(255, 0, 0), -1);
rectangle(src, rec2, Scalar(255, 0, 0), -1);
//圆
circle(src, Point(250, 250), 20, Scalar(0, 255, 255), -1);
//椭圆
RotatedRect box;
box.center = Point(250, 400);
box.size = Size(200, 90);
box.angle = 0.0;
ellipse(src, box, Scalar(0, 0, 255), -1);
imshow("结果", src);
waitKey(0);
destroyAllWindows();
return 0;
}
2.多边形绘制
1.RNG 随机生成多边形的点
详情:随机数RNG使用说明
C++ class cv::RNG
2.cv::fillpoly() 填充
C++ void cv::fillPoly(cv::InputOutputArray img, 输入图像,在上面绘制并输出
cv::InputArrayOfArrays pts, 多边形的点
const cv::Scalar &color, 填充颜色
int lineType = 8,
int shift = 0,
cv::Point offset = cv::Point())
3.cv::polylines() 画线
C++ void cv::polylines(cv::InputOutputArray img, 输入
cv::InputArrayOfArrays pts, 多边形的点
bool isClosed, 是否闭合
const cv::Scalar &color,颜色
int thickness = 1, 不能取-1,不能直接使用-1取填充
int lineType = 8,
int shift = 0)
4.cv::drawContours()也可绘制多边形
#include<opencv2/opencv.hpp>
#include<iostream>
#include<imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat image = imread("C:/Users/YY/Pictures/Saved Pictures/frose.jpg");
//imshow("原图", image);
Mat src = Mat::zeros(512, 512, CV_8UC3);
RNG rng;
vector<Point>pts;
int num = 10;
for (int i = 0; i < num; i++) {
Point x = Point(rng.uniform(0, src.rows), rng.uniform(0, src.cols));
pts.push_back(x);
}
fillPoly(src, pts, Scalar(0, 255, 255));//填充
polylines(src, pts, pts.size(), Scalar(0, 255, 0), 2, 8);//线段
/*利用drawContours绘制多边形
vector<vector<Point>> contours;
contours.push_back(pts);
drawContours(src, contours, -1, Scalar(255, 0, 255), -1);
*/
imshow("图", src);
waitKey(0);
destroyAllWindows();
return 0;
}

