|
绘制形状与文字
使用cv::Point与cv::Scalar
绘制线、矩形、园、椭圆等基本几何形状
随机生成与绘制文本
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
[C++] 纯文本查看 复制代码 /*
注意:
LINE_8
反锯齿LINE_AA 会消耗资源,但是视觉效果好
*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
void MyLines(); //画线函数声明
void MyRectangle();//画矩形
void MyEllopse(); //画椭圆
void MuyCircle();//画圆
void MyPolygon();//填充多边形
void RandLine();//随机画线
Mat src, dst;
int main(int argc, char** argv) {
src = imread("D:/IDE/opencv-3.1.0/demo.jpg");
if (!src.data) {
printf("加载图片异常\n");
return -1;
}
MyLines();
MyRectangle();
MyEllopse();
MuyCircle();
MyPolygon();
putText(src, "hellow opencv", Point(200, 200), CV_FONT_HERSHEY_COMPLEX, 0.8, Scalar(12, 80, 255), 3, LINE_AA);
//RandLine();
/*绘制文字:::中文会乱码 解决参考方案 百度搜索
方案推荐:::[url]https://blog.csdn.net/hk121/article/details/80612797[/url]
*/
RandLine();
//namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
waitKey(0);
return 0;
}
void MyLines() {
Point p1 = Point(20,30);
Point p2;
p2.x = 300;
p2.y = 300;
Scalar color = Scalar(0, 0, 255);
line(src, p1, p2, color, 1, LINE_8);
}//画线
void MyRectangle() {
Rect rect=Rect(200,100,50,60);
//起始位置:宽210,高100. 矩形 的宽50,高60
Scalar color = Scalar(255, 0, 0);
//定义颜色
rectangle(src,rect,color,2,LINE_8);
//画矩形
}//画矩形
void MyEllopse() {
Scalar color = Scalar(255,0,0);
ellipse(src, Point(src.cols / 2, src.rows / 2), Size(src.cols / 4, src.rows / 8), 90, 0, 360,color,2,LINE_8);
//Point(src.cols / 2, src.rows / 2) :::圆的中心点
//Size(src.cols / 4, src.rows / 8) ::: 宽半径,高半径
//90 角度
// 0,360 从0度 画到360 度
//color颜色
//2线宽度
//LINE_8 线条效果
}//画椭圆
void MuyCircle() {
Scalar color = Scalar(0, 255, 0);
Point center = Point(src.cols / 2, src.rows / 2);
//设置圆心点
circle(src, center, 150, color, 3, LINE_AA);
//150为半径
}//画圆
void MyPolygon() {
Point pts[1][5];
pts[0][0] = Point(30, 60);
pts[0][1] = Point(30, 150);
pts[0][2] = Point(70, 150);
pts[0][3] = Point(70, 100);
pts[0][4] = Point(30, 60);
const Point* ppts[] = { pts[0] };
int npt[] = { 5 };
Scalar color = Scalar(255, 255, 70);
fillPoly(src,ppts, npt, 1, color, LINE_8);
}//填充多边形
void RandLine() {
RNG rng(12345);
//设置随机数种子
Point p1;
Point p2;
for (int i = 0; i < 1000; i++)
{
p1.x = rng.uniform(0, src.cols);
p2.x = rng.uniform(0, src.cols);
p1.y = rng.uniform(0, src.rows);
p2.y = rng.uniform(0, src.rows);
//uniform(0, src.cols); 限定x取值范围 0-src.rows,y取值范围0, src.cols
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
//生成随机颜色
if (waitKey(50) > 0) {
break;
}
line(src, p1, p2, color, 1, 8);
imshow("input", src);
}
}//随机画随机彩色线条
|
|