OpenCV基础(二):绘制直线、绘制几何图形、绘制文字、创建窗口

news2024/11/18 15:35:46

前言

在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。本文是音视频系列blog的其中一个, 对应的要学习的内容是:使用OpenCV完成绘制直线、绘制几何图形、绘制文字、创建窗口。


音视频系列blog

音视频系列blog: 点击此处跳转查看


目录

在这里插入图片描述


1 绘制直线、矩形、多边形

1.1 绘制直线

VS2017(或者其他版本VS)如何导入OpenCV,如果你不清楚,可以参考我的这篇文章:

OpenCV分析tfboys十周年演唱会灯牌大战结果

效果图:
在这里插入图片描述

要使用OpenCV绘制直线,可以使用cv::line函数。下是这个示例,演示如何在图像上绘制一条直线:

#include <opencv2/opencv.hpp>

int main() {
    // 创建一个空白图像
    cv::Mat image(400, 600, CV_8UC3, cv::Scalar(255, 255, 255)); // 白色背景

    // 定义直线的起点和终点坐标
    cv::Point start(100, 100);
    cv::Point end(500, 300);

    // 指定直线的颜色(BGR格式)和线宽
    cv::Scalar color(0, 0, 255); // 红色
    // 线条宽度
    int thickness = 2;

    // 在图像上绘制直线
    cv::line(image, start, end, color, thickness);

    // 显示图像窗口并等待按键
    cv::imshow("Line Drawing", image);
    cv::waitKey(0);

    return 0;
}

在这个示例中,首先创建了一个白色背景的图像,然后定义了直线的起点和终点坐标,指定了直线的颜色和线宽,最后使用cv::line函数在图像上绘制直线。

cv::Mat image(400, 600, CV_8UC3, cv::Scalar(255, 255, 255));

cv::Mat image 创建了一个空白背景的图像,以下是这几个参数的含义:

  1. 400:这是图像的高度,表示图像的垂直像素数。在这里,图像的高度为400像素。
  2. 600:这是图像的宽度,表示图像的水平像素数。在这里,图像的宽度为600像素。
  3. CV_8UC3:这是图像的数据类型和通道数的组合。在这里,它有三个部分:
    • CV 表示OpenCV的命名空间。
    • 8U 表示每个像素通道的数据类型是8位无符号整数,即每个通道的像素值在0到255之间。
    • C3 表示图像有3个通道,通常对应于彩色图像中的三个颜色通道:蓝色、绿色和红色(BGR顺序)。
  4. cv::Scalar(255, 255, 255):这是用于初始化图像的初始像素值。在这里,cv::Scalar 是一个用于表示多通道数据的OpenCV类,它包含了三个值,分别对应于图像的三个通道(蓝色、绿色、红色)。255, 255, 255 表示将图像初始化为全白色,因为每个通道的值都是255,这对应于白色。如果你想使用其他颜色,可以修改这三个数字。

因此,这行代码创建了一个宽度为600像素,高度为400像素的3通道图像,初始值为全白色。这个图像可以用于进一步的图像处理和绘制操作。

cv::line(image, start, end, color, thickness);

cv::line 是OpenCV中用于在图像上绘制直线的函数,以下是这些参数的含义:

  1. image:这是要在其上绘制直线的图像,通常是一个 cv::Mat 类型的图像对象,就是上面创建的空白背景的图像。
  2. start:这是直线的起点坐标,它是一个 cv::Point 类型的对象。cv::Point 是OpenCV中用于表示2D点的类,通常由两个整数坐标值构成,分别表示x和y坐标。在上面的示例中,start 变量包含直线的起点坐标。
  3. end:这是直线的终点坐标,同样是一个 cv::Point 类型的对象。它包含直线的终点坐标。
  4. color:这是直线的颜色,通常由一个 cv::Scalar 对象表示。cv::Scalar 是OpenCV中用于表示多通道颜色的类。在BGR(蓝绿红)颜色空间中,cv::Scalar 对象包含三个值,分别对应于蓝色、绿色和红色通道的颜色强度。例如,红色可以表示为 cv::Scalar(0, 0, 255),其中蓝色和绿色通道的值为0,而红色通道的值为255。
  5. thickness:这是直线的线宽,即线的粗细程度。它通常是一个整数值,用于指定直线的像素宽度。在上面示例中,定义了一个整数变量 thickness 并将其初始化为2,就是绘制的直线是2个像素宽度。

通过调用 cv::line 函数并传递这些参数,可以在图像上绘制一条带有指定颜色和线宽的直线,起点和终点由 startend 参数指定。


1.2 绘制矩形

效果图:
在这里插入图片描述

要使用OpenCV中绘制矩形,可以使用cv::rectangle函数。以下是一个示例代码,演示如何在图像上绘制一个矩形:

#include <opencv2/opencv.hpp>

int main() {
    // 创建一个空白图像
    cv::Mat image(400, 600, CV_8UC3, cv::Scalar(255, 255, 255)); // 白色背景

    // 定义矩形的左上角和右下角坐标
    cv::Point topLeft(100, 100);
    cv::Point bottomRight(300, 200);

    // 指定矩形的颜色(BGR格式)和线宽
    cv::Scalar color(0, 0, 255); // 红色
    // 线条宽度
    int thickness = 2;

    // 在图像上绘制矩形
    cv::rectangle(image, topLeft, bottomRight, color, thickness);

    // 显示图像窗口并等待按键
    cv::imshow("Rectangle Drawing", image);
    cv::waitKey(0);

    return 0;
}

首先创建了一个白色背景的图像,然后定义了矩形的左上角和右下角坐标,指定了矩形的颜色和线宽,最后使用cv::rectangle函数在图像上绘制矩形。

cv::rectangle(image, topLeft, bottomRight, color, thickness);

绘制矩形与绘制直线类似,以下是rectangle()中各个参数的含义:

  1. image:这是要在其上绘制矩形的图像,即背景图像。
  2. topLeft:这是矩形的左上角坐标,通常是一个 cv::Point 类型的对象。cv::Point 表示2D点,它包含了x和y坐标值,指定了矩形的左上角位置。
  3. bottomRight:这是矩形的右下角坐标,也是一个 cv::Point 类型的对象,指定了矩形的右下角位置。
  4. color:这是矩形的颜色,通常由一个 cv::Scalar 对象表示。cv::Scalar 表示多通道颜色,通常在BGR颜色空间中表示。例如,cv::Scalar(0, 0, 255) 表示红色。
  5. thickness(第五个参数):这是矩形的线宽,即绘制矩形的线的粗细程度,通常是一个整数值。

使用这些参数,cv::rectangle 函数会在指定的图像上绘制一个矩形,矩形的左上角和右下角由 topLeftbottomRight 参数指定,颜色由 color 参数指定,线宽由 thickness 参数指定。


1.3 绘制多边形

效果图:
在这里插入图片描述

要在OpenCV中绘制多边形,您可以使用 cv::polylines 函数。以下是一个示例代码,演示如何绘制多边形:

#include <opencv2/opencv.hpp>

int main() {
    // 创建一个空白图像
    cv::Mat image(400, 600, CV_8UC3, cv::Scalar(255, 255, 255)); // 白色背景

    // 定义多边形的顶点
    std::vector<cv::Point> points;
    points.push_back(cv::Point(100, 100));
    points.push_back(cv::Point(300, 100));
    points.push_back(cv::Point(400, 300));
    points.push_back(cv::Point(200, 400));

    // 将多边形的第一个点复制到最后一个点,以闭合多边形
    points.push_back(points[0]);

    // 设置多边形的颜色(BGR格式)和线宽
    cv::Scalar color(0, 0, 255); // 红色
    int thickness = 2;

    // 使用指定的顶点、颜色和线宽绘制多边形
    std::vector<std::vector<cv::Point>> contours;
    contours.push_back(points);
    cv::polylines(image, contours, true, color, thickness);

    // 显示图像窗口并等待按键
    cv::imshow("Polygon Drawing", image);
    cv::waitKey(0);

    return 0;
}

在这个示例中,我们首先创建了一个白色背景的图像,然后定义了多边形的顶点,将这些顶点存储在 std::vector<cv::Point> 中。为了闭合多边形,我们将多边形的第一个点复制到最后一个点。

然后,我们设置了多边形的颜色和线宽:

  • color:多边形的颜色,这里设置为红色(cv::Scalar(0, 0, 255))。
  • thickness:线宽,用于控制多边形的线的粗细。

接下来,我们使用 cv::polylines 函数来绘制多边形。在函数中,我们将多边形的顶点传递给 cv::polylines,并设置了颜色和线宽参数。最后一个参数 true 表示要闭合多边形。

这样,您可以绘制带有指定顶点、颜色和线宽的多边形在图像上。您可以根据需要修改多边形的顶点坐标以绘制不同的多边形。


2 绘制圆形与椭圆

2.1 绘制圆形

效果图:
在这里插入图片描述

要在OpenCV中绘制圆形,可以使用 cv::circle 函数。以下是一个示例代码,演示如何在图像上绘制一个圆形:

#include <opencv2/opencv.hpp>

int main() {
    // 创建一个空白图像
    cv::Mat image(400, 600, CV_8UC3, cv::Scalar(255, 255, 255)); // 白色背景

    // 定义圆心坐标
    cv::Point center(300, 200);

    // 定义圆的半径
    int radius = 50;

    // 指定圆的颜色(BGR格式)和线宽
    cv::Scalar color(0, 0, 255); // 红色
    int thickness = 2;

    // 在图像上绘制圆
    cv::circle(image, center, radius, color, thickness);

    // 显示图像窗口并等待按键
    cv::imshow("Circle Drawing", image);
    cv::waitKey(0);

    return 0;
}

在这个示例中,首先创建了一个白色背景的图像,然后定义了圆的圆心坐标、半径、颜色和线宽。最后,使用 cv::circle 函数在图像上绘制圆。

cv::circle(image, center, radius, color, thickness);

cv::circle 函数用于在OpenCV中绘制圆形,以下是这个函数的各个参数的含义:

  1. image:这是要在其上绘制圆形的图像,即背景图像。
  2. center:这是圆的圆心坐标,通常是一个 cv::Point 类型的对象。cv::Point 表示2D点,它包含了x和y坐标值,指定了圆的中心位置。
  3. radius:这是圆的半径,通常是一个整数值,表示圆的大小。
  4. color:这是圆的颜色,通常由一个 cv::Scalar 对象表示。cv::Scalar 表示多通道颜色,通常在BGR颜色空间中表示。例如,cv::Scalar(0, 0, 255) 表示红色。
  5. thickness:这是圆的线宽,即绘制圆的线的粗细程度,通常是一个整数值。如果 thickness 为正数,表示绘制实心圆;如果 thickness 为负数(例如 -1),表示绘制一个填充的圆,即实心圆。

使用这些参数,cv::circle 函数会在指定的图像上绘制一个圆形,圆的圆心由 center 参数指定,半径由 radius 参数指定,颜色由 color 参数指定,线宽由 thickness 参数指定。


2.2 绘制椭圆

效果图:
在这里插入图片描述

要在OpenCV中绘制椭圆,可以使用 cv::ellipse 函数。以下是一个示例代码,演示如何在图像上绘制一个椭圆:

#include <opencv2/opencv.hpp>

int main() {
    // 创建一个空白图像
    cv::Mat image(400, 600, CV_8UC3, cv::Scalar(255, 255, 255)); // 白色背景

    // 定义椭圆的参数
    cv::Point center(300, 200); // 椭圆的中心坐标
    cv::Size axes(100, 50);    // 长轴和短轴的长度
    double angle = 30.0;       // 椭圆的旋转角度
    double startAngle = 0.0;   // 起始角度
    double endAngle = 360.0;   // 终止角度
    cv::Scalar color(0, 0, 255); // 红色
    int thickness = 2;

    // 在图像上绘制椭圆
    cv::ellipse(image, center, axes, angle, startAngle, endAngle, color, thickness);

    // 显示图像窗口并等待按键
    cv::imshow("Ellipse Drawing", image);
    cv::waitKey(0);

    return 0;
}

在这个示例中,首先创建了一个白色背景的图像,然后定义了椭圆的参数,包括中心坐标、长轴和短轴的长度、旋转角度、起始角度、终止角度、颜色和线宽。最后,使用 cv::ellipse 函数在图像上绘制椭圆。

cv::ellipse(image, center, axes, angle, startAngle, endAngle, color, thickness);

cv::ellipse 函数用于在OpenCV中绘制椭圆,以下是这个函数的各个参数的含义:

  1. image:这是要在其上绘制椭圆的图像,即背景图像。
  2. center:这是椭圆的中心坐标,通常是一个 cv::Point 类型的对象。cv::Point 表示2D点,它包含了x和y坐标值,指定了椭圆的中心位置。
  3. axes:这是一个 cv::Size 类型的对象,表示椭圆的两个轴的长度。通常,其中的 width(宽度) 对应于长轴的长度,而 height(高度) 对应于短轴的长度。
  4. angle:这是椭圆的旋转角度,以度为单位。正值表示顺时针旋转,负值表示逆时针旋转。如果angle = 0则表示该椭圆与X轴对齐。
  5. startAngle:这是椭圆的起始角度,以度为单位。它指定了从椭圆的哪个角度开始绘制。起始角度 startAngle 通常是相对于X轴正方向的角度。在OpenCV中,默认的角度测量方式是逆时针方向的,因此起始角度0.0表示与X轴正方向相对应。从这个起始角度开始,可以顺时针或逆时针绘制椭圆,具体取决于旋转角度和终止角度的值以及绘制的方向。例如,如果 startAngle 为0.0,endAngle 为180.0,那么将绘制一个与X轴正方向相对的半圆。如果 startAngle 为0.0,endAngle 为360.0,那么将绘制一个完整的椭圆。
  6. endAngle:这是椭圆的终止角度,以度为单位。它指定了在椭圆的哪个角度结束绘制。
  7. color:这是椭圆的颜色,通常由一个 cv::Scalar 对象表示。cv::Scalar 表示多通道颜色,通常在BGR颜色空间中表示。例如,cv::Scalar(0, 0, 255) 表示红色。
  8. thickness:这是椭圆的线宽,即绘制椭圆的线的粗细程度,通常是一个整数值。如果 thickness 为正数,表示绘制实线椭圆;如果 thickness 为负数,表示绘制填充的椭圆,即实心椭圆。

使用这些参数,cv::ellipse 函数会在指定的图像上绘制一个椭圆,根据中心坐标、轴的长度、旋转角度以及起始和终止角度来定义椭圆的形状和位置。颜色和线宽参数用于定义椭圆的外观特征。​


3 绘制随机直线与随机矩形

3.1 绘制随机直线

效果图:
在这里插入图片描述

要在OpenCV中绘制随机直线,可以使用随机数生成器来生成随机的线条参数,然后使用cv::line函数绘制直线。以下是一个示例代码,演示如何绘制随机直线:

#include <opencv2/opencv.hpp>
#include <cstdlib> // 包含随机数生成器所需的头文件

int main() {
    // 创建一个空白图像
    cv::Mat image(400, 600, CV_8UC3, cv::Scalar(255, 255, 255)); // 白色背景

    // 随机生成直线的参数
    int x1 = rand() % image.cols; // 随机生成起点 x 坐标
    int y1 = rand() % image.rows; // 随机生成起点 y 坐标
    int x2 = rand() % image.cols; // 随机生成终点 x 坐标
    int y2 = rand() % image.rows; // 随机生成终点 y 坐标

    // 随机生成直线的颜色(BGR格式)
    cv::Scalar color(rand() % 256, rand() % 256, rand() % 256);

    // 随机生成直线的线宽
    int thickness = rand() % 5 + 1; // 随机生成1到5之间的整数作为线宽

    // 使用随机参数绘制直线
    cv::line(image, cv::Point(x1, y1), cv::Point(x2, y2), color, thickness);

    // 显示图像窗口并等待按键
    cv::imshow("Random Line Drawing", image);
    cv::waitKey(0);

    return 0;
}

在这个示例中,我们首先创建了一个白色背景的图像,然后使用rand()函数生成随机的起点和终点坐标、颜色和线宽。然后,使用cv::line函数绘制了一条随机直线。

请注意,为了生成随机数,包含了<cstdlib>头文件,并使用rand()函数来生成随机数。为了获得特定范围的随机整数,我们使用%操作符和适当的范围来限制生成的随机数。


3.2 绘制随机矩形

效果图:
在这里插入图片描述

要在OpenCV中绘制随机矩形,使用随机数生成器来生成随机的矩形参数,然后使用 cv::rectangle 函数绘制矩形。以下是一个示例代码,演示如何绘制随机矩形:

#include <opencv2/opencv.hpp>
#include <cstdlib> // 包含随机数生成器所需的头文件

int main() {
    // 创建一个空白图像
    cv::Mat image(400, 600, CV_8UC3, cv::Scalar(255, 255, 255)); // 白色背景

    // 随机生成矩形的参数
    int x = rand() % image.cols; // 随机生成矩形左上角 x 坐标
    int y = rand() % image.rows; // 随机生成矩形左上角 y 坐标
    int width = rand() % 200 + 50; // 随机生成宽度,范围在50到250之间
    int height = rand() % 150 + 50; // 随机生成高度,范围在50到200之间

    // 随机生成矩形的颜色(BGR格式)
    cv::Scalar color(rand() % 256, rand() % 256, rand() % 256);

    // 随机生成矩形的线宽
    int thickness = rand() % 5 + 1; // 随机生成1到5之间的整数作为线宽

    // 使用随机参数绘制矩形
    cv::Rect rectangle(x, y, width, height);
    cv::rectangle(image, rectangle, color, thickness);

    // 显示图像窗口并等待按键
    cv::imshow("Random Rectangle Drawing", image);
    cv::waitKey(0);

    return 0;
}

在这个示例中,首先创建了一个白色背景的图像,然后使用 rand() 函数生成随机的矩形参数,包括左上角坐标、宽度、高度、颜色和线宽。然后,使用 cv::rectangle 函数绘制了一个随机矩形。


4 绘制文本并指定字体和大小

效果图:
在这里插入图片描述

要在OpenCV中绘制文本并指定字体和大小,可以使用 cv::putText 函数。以下是一个示例代码,演示如何绘制文本并设置字体和大小:

#include <opencv2/opencv.hpp>

int main() {
    // 创建一个空白图像
    cv::Mat image(400, 600, CV_8UC3, cv::Scalar(255, 255, 255)); // 白色背景

    // 设置文本的字体和大小
    int fontFace = cv::FONT_HERSHEY_SIMPLEX; // 字体类型
    double fontScale = 2.0; // 字体大小
    int thickness = 3; // 文本线宽

    // 设置文本的位置和内容
    cv::Point textPosition(100, 200); // 文本起始位置
    std::string text = "Hello, OpenCV!";

    // 设置文本的颜色
    cv::Scalar textColor(0, 0, 255); // 红色

    // 使用指定的字体、大小、颜色等参数绘制文本
    cv::putText(image, text, textPosition, fontFace, fontScale, textColor, thickness);

    // 显示图像窗口并等待按键
    cv::imshow("Text Drawing", image);
    cv::waitKey(0);

    return 0;
}

在这个示例中,我们首先创建了一个白色背景的图像,然后使用以下参数设置文本的字体和大小:

  • fontFace:字体类型,cv::FONT_HERSHEY_SIMPLEX 是一种常见的字体类型,也可以选择其他字体类型。
  • fontScale:字体大小,这里设置为2.0,可以根据需要调整。
  • thickness:文本线宽,用于控制文本的粗细。

然后,设置了文本的位置和内容:

  • textPosition:文本起始位置,这里设置为(100, 200)。
  • text:要绘制的文本内容,这里设置为"Hello, OpenCV!"。

接下来,设置了文本的颜色:

  • textColor:文本颜色,这里设置为红色(cv::Scalar(0, 0, 255))。

最后,使用 cv::putText 函数在图像上绘制文本,将上述参数传递给函数。这样,就可以绘制带有指定字体和大小的文本在图像上。


5 窗口的创建

效果图:
在这里插入图片描述

以下是一个示例代码,演示如何在OpenCV中创建窗口、修改窗口大小、删除窗口以及删除所有窗口:

#include <opencv2/opencv.hpp>

int main() {
    // 创建一个窗口并指定标题
    cv::namedWindow("My Window", cv::WINDOW_AUTOSIZE);

    // 等待一段时间
    cv::waitKey(2000); // 等待2秒钟

    // 修改窗口大小为900x400像素
    cv::resizeWindow("My Window", 900, 400);

    // 等待一段时间
    cv::waitKey(2000); // 等待2秒钟

    // 删除窗口
    cv::destroyWindow("My Window");

    // 等待一段时间
    cv::waitKey(2000); // 等待2秒钟

    // 创建一个新窗口并指定标题
    cv::namedWindow("Another Window", cv::WINDOW_AUTOSIZE);

    // 等待一段时间
    cv::waitKey(2000); // 等待2秒钟

    // 删除所有窗口
    cv::destroyAllWindows();

    return 0;
}

在这个示例中,首先使用 cv::namedWindow 创建一个名为 “My Window” 的窗口,并使用 cv::WINDOW_AUTOSIZE 模式,使窗口自动调整大小以适应内容。然后,我们使用 cv::waitKey 函数等待2秒钟,以使窗口保持打开状态。

接下来,使用 cv::resizeWindow 函数将窗口大小修改为900x400像素,并再次等待2秒钟。

然后,使用 cv::destroyWindow 函数删除名为 “My Window” 的窗口。

接着,创建了一个新窗口 “Another Window”,并等待2秒钟。

最后,使用 cv::destroyAllWindows 函数删除所有窗口。


源代码:(欢迎star)
OpenCV基础(二):绘制直线、绘制几何图形、绘制文字、创建窗口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1001539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

折半查找(二分查找)

1.算法思想 折半查找&#xff0c;又称“二分查找”&#xff0c;仅适用于有序的顺序表。 1.适用范围 顺序表拥有随机访问的特性&#xff0c;链表没有。 图解&#xff1a;&#xff08;low代表左区间边界&#xff0c;high代表右区间边界&#xff0c;mid代表中间元素&#xff0…

Nginx安装与常见命令

一、Nginx简介 官方文档&#xff1a;https://www.nginx.com/ Nginx中文文档&#xff1a;https://nginx.cn/doc/index.html Nginx由俄罗斯人&#xff08;Igor Sysoev&#xff09;编写的轻量级Web服务器&#xff0c;它的发音为 [ˈendʒɪnks] 。 Nginx 不仅是一款高性能的 HTTP服…

基于YOLOv8模型的烟头目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的烟头目标检测系统可用于日常生活中检测与定位车辆目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

字符串的创建及常用方法大全

字符串 1.索引思维 值类型:不会改变原来的数 var arr 100//值类型function fn(a) {a 200}fn(arr)console.log(arr);//100引用类型:会改变原来的数组 // var arr [11, 22, 33, 44]// var arr1 arr;//arr1引用了arr的地址// arr1[0] "AA"// console.log(arr1);//…

js中运算规则

法&#xff1a; 有对象&#xff0c;对象是根据object.valueof().toString()返回的值 //toString的对象 var obj2 {toString:function(){return a} } console.log(2obj2) //输出结果2a//常规对象 var obj1 {a:1,b:2 } console.log(2obj1)&#xff1b; //输出结果 2[object…

具体型号的CPU与GPU/CUDA计算能力实测记录

测试结果仅供参考&#xff0c;不一定做到非常严谨。 另外京东上查看&#xff0c;目前&#xff08;2023年9月&#xff09;i7-10700的价格好像在2000元左右&#xff1b;Quadro RTX 6000显卡&#xff0c;约2万元左右。 CUDA适合大批量的并行计算&#xff0c;CPU更加擅长分支预测以…

医院安全不良事件报告系统源码 PHP+ vue2+element+ laravel8+ mysql5.7+ vscode开发

不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”&#xff0c;结合预存上百套已正在使用的模板&#xff0c;帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件、意…

华为云云耀云服务器L实例使用教学:安装jdk和配置环境变量

最近各个平台都被华为mate60的消息霸屏了&#xff0c;5g麒麟&#xff0c;库克来了都不行 华为除了做手机&#xff0c;在云计算领域也有很多年的深耕&#xff0c;华为作为全球领先的信息和通信技术&#xff08;ICT&#xff09;解决方案提供商&#xff0c;一直以其创新的产品和服…

如何管理敏捷开发迭代,Sprint Backlog管理?

​什么是Sprint Backlog&#xff1f; Sprint Backlog是Scrum的主要工件之一。在Scrum中&#xff0c;团队按照迭代的方式工作&#xff0c;每个迭代称为一个Sprint。在Sprint开始之前&#xff0c;PO会准备好产品Backlog&#xff0c;准备好的产品Backlog应该是经过梳理、估算和优…

《C++ primer》练习3.17:改写单词为大写

最近看《C primer》&#xff0c;有这样一个题目 从cin读入一组词并把它们存入一个vector 对象&#xff0c;然后设法把所有词都改写为大写形式。输出改变后的结果&#xff0c;每个词占一行。 考察 怎么输入字符串怎么存入vector对象怎么对字符串字符处理 代码 #include <i…

什么是lockbit勒索病毒,中了勒索病毒怎么办?勒索病毒解密,数据恢复

lockbit是一种勒索病毒&#xff0c;是一种极具破坏性的电脑病毒&#xff0c;它利用加密技术来锁定用户文件&#xff0c;并以此为条件向用户勒索钱财。lockbit病毒的传播方式有通过电子邮件附件、恶意网站、点对点网络等多种途径进行传播。这种病毒一旦侵入电脑系统&#xff0c;…

Redis——zset类型详解

概要 zset是有序集合&#xff0c;将zset中的members引入一个属性score&#xff0c;根据这个属性值来进行排序&#xff0c;其中members不可以重复&#xff0c;score可以重复&#xff08;按照字典序排序&#xff09;&#xff0c;默认按照升序排序 有序集合中提供指定分数和元素…

使用POI实现操作Excel文件。

1、添加依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-o…

Keras入门与残差网络的搭建

发现草稿箱里还有一篇很早之前的学习笔记&#xff0c;希望可以帮助到有需要的童鞋~ 目录 1、keras入门 2、残差网络 &#xff08;ResNet&#xff09; 2.1、恒等块 2.2、卷积块 搭建一个50层的残差网络 自己的测试数据 1、keras入门 本文参考参考 Keras模型大纲&#xff…

SSM SpringBoot vue快递柜管理系统

SSM SpringBoot vue快递柜管理系统 系统功能 登录 注册 个人中心 快递员管理 用户信息管理 用户寄件管理 配送信息管理 寄存信息管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Mybaits)或SpringBoot 前端: vue 数据库&#xff1a;Mys…

《VulnHub》DarkHole:1

VulnHub 1&#xff1a;靶场信息2&#xff1a;打靶2.1&#xff1a;情报收集&威胁建模2.2&#xff1a;漏洞分析&渗透攻击 3&#xff1a;总结3.1&#xff1a;命令&工具3.1.1&#xff1a;Nmap 3.2&#xff1a;关键技术 VulnHub 打靶记录。官网&#xff1a;https://www.…

C++零碎记录(十)

17. 继承对象内存 17.1 查询继承对象所占内存 #include <iostream> using namespace std; #include<string>//继承中的对象模型class Base { public:int m_A; protected:int m_B; private:int m_C; };//公共继承 class Son:public Base {int m_D; };//利用开发人…

在Creo 6.0中画图模板问题

在Creo 6.0中&#xff0c;文件的默认模板是英制模板“inlbs_part_solid”,此文件模板中尺寸的单位是inch。我们建模中需要的单位是mm&#xff0c;改变Creo文件默认的单位有两种方法。 1 【新建】对话框取消勾选【使用默认模板】对话框 &#xff08;1&#xff09;单击主页选项…

从板凳围观到玩转行家:Moonbeam投票委托如何让普通用户一同参与

今年5月&#xff0c;Moonbeam发起了一项社区链上治理中投票委托反馈的调查。187位社区成员参与了这项调查&#xff0c;调查发现受访者对治理感兴趣&#xff0c;增加参与度只需要进行一些调整&#xff0c;即更简化的投票流程。 治理和去中心化是Web3的核心&#xff0c;随着Moon…

2023/9/11 qtc++

#include <iostream> #include <cstring> using namespace std; class myString { private:char *str;int size; public://无参构造myString():size(10){str new char[size]; //构造出一个长度为10的字符串strcpy(str,""); //赋值为空串}//有…