既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
cv::Mat image(500, 500, CV_8UC3, cv::Scalar(255, 255, 255)); // 创建一个白色背景的图像
cv::Point pt1(100, 100); // 线段起始点坐标
cv::Point pt2(400, 400); // 线段结束点坐标
cv::Scalar color(0, 0, 255); // 线段颜色,红色
cv::line(image, pt1, pt2, color, 2, cv::LINE_AA); // 在图像上绘制线段
cv::imshow(“Line”, image);
cv::waitKey(0);
(2)画椭圆cv::ellipse
函数参数说明:
>
> void cv::ellipse(
> cv::InputOutputArray img, // 输入输出图像,可以是Mat类型或者图像矩阵
>
>
> cv::Point center, // 椭圆中心坐标
>
>
> cv::Size axes, // 椭圆的长轴和短轴长度
>
>
> double angle, // 椭圆旋转角度(逆时针为正)
> double startAngle, // 起始角度(顺时针方向为0度)
> double endAngle, // 终止角度(顺时针方向为0度)
> const cv::Scalar& color, // 椭圆颜色(BGR顺序)
> int thickness = 1, // 线条粗细,默认为1
>
>
> int lineType = cv::LINE\_8, // 线条类型,默认为8-connected线条
>
>
> int shift = 0 // 坐标点小数位数,默认为0
>
>
> );
>
>
>
使用示例:这段代码创建了一个白色背景的图像,然后使用 `cv::ellipse` 函数在图像上绘制了一个红色椭圆。
cv::Mat image(500, 500, CV_8UC3, cv::Scalar(255, 255, 255)); // 创建一个白色背景的图像
cv::Point center(250, 250); // 椭圆中心点坐标
cv::Size axes(100, 200); // 长轴和短轴长度
double angle = 30; // 椭圆旋转角度
double startAngle = 0; // 起始角度
double endAngle = 360; // 结束角度
cv::Scalar color(0, 0, 255); // 椭圆颜色,红色
cv::ellipse(image, center, axes, angle, startAngle, endAngle, color, 2, cv::LINE_AA); // 在图像上绘制椭圆
cv::imshow(“Ellipse”, image);
cv::waitKey(0);
**(3)画矩形cv::rectangle**
>
> // 函数原型:
> void cv::line(
> InputOutputArray img, // 输入输出图像。
> Point pt1, // 矩形的一个顶点坐标。
> Point pt2, // 矩形的对角顶点坐标。
> const Scalar& color, // 线段的颜色,可以是一个 `Scalar` 对象,表示 BGR 颜色值。
> int thickness = 1, // 线段的粗细,默认为 1。
> int lineType = LINE\_8, //线段的类型,可以是 `LINE_4`(4邻接线段)、`LINE_8`(8邻接线段)或 `LINE_AA`(反锯齿线段)。
> int shift = 0 // 坐标点的小数位数。
>
>
> )
>
>
>
使用示例:这段代码创建了一个白色背景的图像,然后使用 `cv::rectangle` 函数在图像上绘制了一个红色矩形。
cv::Mat image(500, 500, CV_8UC3, cv::Scalar(255, 255, 255)); // 创建一个白色背景的图像
cv::Point pt1(100, 100); // 矩形的一个顶点坐标
cv::Point pt2(400, 400); // 矩形的对角顶点坐标
cv::Scalar color(0, 0, 255); // 矩形颜色,红色
cv::rectangle(image, pt1, pt2, color, 2, cv::LINE_AA); // 在图像上绘制矩形
cv::imshow(“Rectangle”, image);
cv::waitKey(0);
**(4)画圆cv::circle 画填充cv::fillPoly**
`cv::circle` 函数用于在图像上绘制圆,而 `cv::fillPoly` 函数用于绘制填充多边形。
>
> // 函数原型:
> void cv::circle(
> InputOutputArray img, // 输入输出图像。
> Point center, // 圆心坐标。
> int radius, // 圆的半径。
>
>
> const Scalar& color, // 线段的颜色,可以是一个 `Scalar` 对象,表示 BGR 颜色值。
> int thickness = 1, // 线段的粗细,默认为 1。
> int lineType = LINE\_8, //线段的类型,可以是 `LINE_4`(4邻接线段)、`LINE_8`(8邻接线段)或 `LINE_AA`(反锯齿线段)。
> int shift = 0 // 坐标点的小数位数。
>
>
> )
>
>
>
> void cv::fillPoly(
> cv::InputOutputArray img, // 输入输出图像,可以是Mat类型或者图像矩阵
> const cv::Point\*\* pts, // 多边形顶点的指针数组
> const int\* npts, // 每个多边形的顶点数
> int ncontours, // 多边形的数量
> const cv::Scalar& color, // 填充颜色(BGR顺序)
>
>
> int lineType = LINE\_8, // 线条类型,默认为8-connected线条
> int shift = 0, // 坐标点小数位数,默认为0
> cv::Point offset = cv::Point() // 偏移量,默认为原点
>
>
> );
>
>
>
>
**使用示例:**
/// 1、画圆
cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3); // 创建一个空白图像
cv::Point center(250, 250); // 圆心坐标
int radius = 100; // 半径
cv::Scalar color(0, 0, 255); // 颜色,这里为红色(BGR顺序)
int thickness = 2; // 线条粗细
cv::circle(image, center, radius, color, thickness);
/// 2、画填充多边形
cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3); // 创建一个空白图像
std::vectorcv::Point points; // 多边形顶点坐标
points.push_back(cv::Point(100, 100));
points.push_back(cv::Point(200, 100));
points.push_back(cv::Point(150, 200));
cv::Scalar color(0, 255, 0); // 颜色,这里为绿色(BGR顺序)
// 将多边形的顶点坐标放入一个vector中
std::vector<std::vectorcv::Point> polygons;
polygons.push_back(points);
// 填充多边形
cv::fillPoly(image, polygons, color);
##### **3、随机生成与绘制文本**
**(1)生成高斯随机数:`cv::RNG`类中的 gaussian (double sigma)**
该函数接受一个`double`类型的参数`sigma`,表示高斯分布的标准差。
cv::RNG rng; // 创建随机数生成器对象
double sigma = 1.0; // 高斯分布的标准差
double randomNum = rng.gaussian(sigma); // 生成一个高斯随机数
这样,你就可以生成一个服从高斯分布的随机数了。
**(2)生成正态分布随机数:`cv::RNG`类中的 uniform (int a, int b)**
该函数接受两个`int`类型的参数`a`和`b`,表示生成随机数的范围。
cv::RNG rng; // 创建随机数生成器对象
int a = 0; // 随机数范围的下界
int b = 10; // 随机数范围的上界
int randomNum = rng.uniform(a, b); // 生成一个正态分布的随机数
这样,你就可以生成一个在指定范围内的正态分布随机数了。
##### 4、代码演示
#include <opencv2/opencv.hpp>
#include
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(“D:/vcprojects/images/test1.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;
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
id RandomLineDemo() {
RNG rng(12345);
Point pt1;
[外链图片转存中…(img-NLvyvnqh-1715498843914)]
[外链图片转存中…(img-dHseH49k-1715498843914)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新