绘制形状比较简单,基本上没啥子好说的,见代码。
演示代码:
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; Mat bgImage; const char* drawdemo_win = "draw shapes and text demo"; void MyLines(); void MyRectangle(); void MyEllipse(); void MyCircle(); void MyPolygon(); void RandomLineDemo(); int main(int argc, char** argv) { bgImage = imread("e:/2.png"); if (!bgImage.data) { printf("could not load image...\n"); return -1; } MyLines(); MyRectangle(); MyEllipse(); MyCircle(); MyPolygon(); putText(bgImage, "Hello OpenCV", Point(300, 300), CV_FONT_HERSHEY_COMPLEX, 1.0, Scalar(12, 23, 200), 3, 8); namedWindow(drawdemo_win, CV_WINDOW_AUTOSIZE); imshow(drawdemo_win, bgImage); //RandomLineDemo(); waitKey(0); return 0; } void MyLines() { Point p1 = Point(20, 30); Point p2; p2.x = 400; p2.y = 400; Scalar color = Scalar(0, 0, 255); line(bgImage, p1, p2, color, 1, LINE_AA); } void MyRectangle() { Rect rect = Rect(200, 100, 300, 300); Scalar color = Scalar(255, 0, 0); rectangle(bgImage, rect, color, 2, LINE_8); } void MyEllipse() { Scalar color = Scalar(0, 255, 0); ellipse(bgImage, Point(bgImage.cols / 2, bgImage.rows / 2), Size(bgImage.cols / 4, bgImage.rows / 8), 90, 0, 360, color, 2, LINE_8); } void MyCircle() { Scalar color = Scalar(0, 255, 255); Point center = Point(bgImage.cols / 2, bgImage.rows / 2); circle(bgImage, center, 150, color, 2, 8); } void MyPolygon() { Point pts[1][5]; pts[0][0] = Point(100, 100); pts[0][1] = Point(100, 200); pts[0][2] = Point(200, 200); pts[0][3] = Point(200, 100); pts[0][4] = Point(100, 100); const Point* ppts[] = { pts[0] }; int npt[] = { 5 }; Scalar color = Scalar(255, 12, 255); fillPoly(bgImage, ppts, npt, 1, color, 8); } void RandomLineDemo() { RNG rng(12345); Point pt1; Point pt2; Mat bg = Mat::zeros(bgImage.size(), bgImage.type()); namedWindow("random line demo", CV_WINDOW_AUTOSIZE); for (int i = 0; i < 100000; i++) { pt1.x = rng.uniform(0, bgImage.cols); pt2.x = rng.uniform(0, bgImage.cols); pt1.y = rng.uniform(0, bgImage.rows); pt2.y = rng.uniform(0, bgImage.rows); Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); if (waitKey(50) > 0) { break; } line(bg, pt1, pt2, color, 1, 8); imshow("random line demo", bg); } }
(画几何形状和文字)
(随机画线)
代码说明:
Point表示2D平面上一个点x,y Point p; p.x = 10; p.y = 8; or p = Pont(10,8); Scalar表示四个元素的向量 Scalar(a, b, c);// a = blue, b = green, c = red表示RGB三个通道
画线 cv::line (LINE_4\LINE_8\LINE_AA) 画椭圆cv::ellipse 画矩形cv::rectangle 画圆cv::circle 画填充cv::fillPoly
填充矩形
可以通过多边形填充来填充矩形
随机数生成cv::RNG
生成高斯随机数gaussian (double sigma) 生成正态分布随机数uniform (int a, int b)
绘制添加文字
putText函数 中设置fontFace(cv::HersheyFonts), - fontFace, CV_FONT_HERSHEY_PLAIN - fontScale , 1.0, 2.0~ 8.0
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文章代码及资料部分或全部来自贾志刚老师的视频,勇哥只是在个人理解的基础上做学习笔记,转载请附上博文链接!
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


