目录
使用cv::Point与cv::Scalar
Point表示2D平面上一个点x,y Point p; p.x = 10; p.y = 8; or p = Pont(10,8);
Point2f or Point2d 为浮点数类型
Point3表示3D平面上一个点x,y,z Point3 p=(1,2,3) x,y,z都为整数类型
Point3f p=(1.1,1.2,1.3) 为浮点数类型
Scalar表示四个元素的向量 Scalar(a, b, c);
// a = blue, b = green, c = red表示RGB三个通道
画直线 cv::line
#include <iostream>
#include <cstring>
#include <opencv2/highgui/highgui.hpp>
#include<cmath>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
//画直线
void MyLine(Mat bgImage)
{
Point p1 = Point(20, 30);
Point p2;
p2.x = 300;
p2.y = 300;
Scalar color = Scalar(0, 0, 255);
//线的粗细程度 线的类型 8 4 还有反锯齿AA
line(bgImage, p1, p2, color, 1, LINE_8);
//LINE_4就是像素有4个方向可以移动(上下左右)
//LINE_8则有8个可移动的方向 上下左右 上左 上右 下左 下右
//LINE_AA方向则更多
}
int main()
{
Mat src = imread("D:/opencv/2/a.jpg");
if (src.empty())
{
printf("could not load image...\n");
return -1;
}
namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src);
MyLine(src);
namedWindow("output", WINDOW_AUTOSIZE);
imshow("output", src);
waitKey();
return 0;
}
画矩形cv::rectangle
void MyRectangle(Mat bgImage)
{
Rect rect1 = Rect(50, 10, 300, 300);//定义矩形对象,左上角坐标为(50.10)宽为300,高为300
Scalar color = Scalar(255, 0, 0);//定义颜色
rectangle(bgImage, rect1, color, 2, LINE_AA);
// 矩形所在图像 矩形的一个顶点 矩形对角线上的另一个顶点 颜色 线条粗细(取负值时,颜色填充矩形) 线条类型
//rectangle(bgImage, Point(50,10), Point(350, 310), Scalar(255,0,0), -1, LINE_AA);
}
画圆cv::circle
void MyCircle(Mat bgImage)
{
Scalar color = Scalar(255, 255, 0);
Point center = Point(bgImage.cols / 2, bgImage.rows / 2);//圆心
//输入的图像 圆的中心,圆的半径,圆的颜色,线的粗细,线的类型
circle(bgImage, center, 100, color, 2, 8);
}
画椭圆cv::ellipse
void MyEllipse(Mat bgImage)
{
Scalar color = Scalar(0, 255, 0);
//输入的图像,圆心坐标(x,y), 轴的长度,圆弧起始角的角度,圆弧终结角的角度,颜色,线的类型
ellipse(bgImage, Point(bgImage.cols / 2, bgImage.rows / 2), Point(bgImage.cols / 4, bgImage.rows / 8), 45, 0, 360, color, LINE_4);
}
填充多边形cv::fillPoly
void MyPolygon(Mat bgImage)
{
//矩形的点
Point pts[1][5];
pts[0][0] = Point(50, 50);
pts[0][1] = Point(50, 100);
pts[0][2] = Point(100, 100);
pts[0][3] = Point(100, 50);
pts[0][4] = Point(50, 50);//返回到初始点
const Point* ppts[] = { pts[0] };
int npt[] = { 5 };//点的数量
Scalar color = Scalar(0, 255, 255);
//所在图像 图形的点,点的数量,画几个多边形,颜色,线段的类型
fillPoly(bgImage, ppts, npt, 1, color, 8);
}
画文字 cv::putText
//写文字
// 待绘制的图形,待绘制的文字,文本框的左下角,字体,字的大小,颜色,线条宽度,线型
putText(src,"hello world",Point(100,50),FONT_HERSHEY_COMPLEX,1.5,Scalar(255,0,255),1,8);
随机数生成cv::RNG
生成高斯随机数gaussian (double sigma)
生成正态分布随机数uniform (int a, int b)
#include <iostream>
#include <cstring>
#include <opencv2/highgui/highgui.hpp>
#include<cmath>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
void RandLineDemo(Mat bgImage)
{
RNG rng(12345);//随机数
Point pt1, pt2;
for (int i = 0; i < 200; i++)
{
pt1.x = rng.uniform(0, bgImage.cols);
pt1.y = rng.uniform(0, bgImage.rows);
pt2.x = rng.uniform(0, bgImage.cols);
pt2.y = rng.uniform(0, bgImage.rows);
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
line(bgImage, pt1, pt2, color, 1, LINE_8);
imshow("output", bgImage);
if (waitKey(50) > 0)
{
break;
}
}
}
int main()
{
Mat bg = Mat::zeros(1024, 2048, 16);
RandLineDemo(bg);
namedWindow("output", WINDOW_AUTOSIZE);
imshow("output", bg);
waitKey();
return 0;
}