opencv中绘制图像的函数

这篇具有很好参考价值的文章主要介绍了opencv中绘制图像的函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常用函数简介

OpenCV 中用于绘制不同图形的 C++ 函数的简要介绍:

  1. 绘制矩形框:

    cv::rectangle(image, cv::Point pt1, cv::Point pt2, cv::Scalar color, int thickness);
    • image:目标图像
    • pt1 和 pt2:矩形的对角线顶点坐标
    • color:矩形的颜色
    • thickness:线条的粗细,如果为负数,表示填充矩形
  2. 绘制文字:

    cv::putText(image, text, cv::Point org, int fontFace, double fontScale, cv::Scalar color, int thickness);
    • image:目标图像
    • text:要绘制的文本
    • org:文本的起始坐标
    • fontFace:字体类型
    • fontScale:字体缩放因子
    • color:文本颜色
    • thickness:线条的粗细
  3. 绘制圆:

    cv::circle(image, cv::Point center, int radius, cv::Scalar color, int thickness);
    • image:目标图像
    • center:圆心坐标
    • radius:半径
    • color:圆的颜色
    • thickness:线条的粗细,如果为负数,表示填充圆
  4. 绘制椭圆:

    cv::ellipse(image, cv::Point center, cv::Size axes, double angle, double startAngle, double endAngle, cv::Scalar color, int thickness);
    • image:目标图像
    • center:椭圆中心坐标
    • axes:长轴和短轴的大小
    • angle:椭圆旋转角度
    • startAngle 和 endAngle:椭圆的起始和结束角度
    • color:椭圆的颜色
    • thickness:线条的粗细,如果为负数,表示填充椭圆
  5. 绘制线段:

    cv::line(image, cv::Point pt1, cv::Point pt2, cv::Scalar color, int thickness);
    • image:目标图像
    • pt1 和 pt2:线段的起点和终点坐标
    • color:线段的颜色
    • thickness:线条的粗细
  6. 绘制多边形:

    cv::polylines(image, std::vector<std::vector<cv::Point>> contours, bool isClosed, cv::Scalar color, int thickness);
    • image:目标图像
    • contours:多边形的顶点坐标
    • isClosed:是否封闭多边形
    • color:多边形的颜色
    • thickness:线条的粗细
  7. 绘制填充多边形:

    cv::fillPoly(image, std::vector<std::vector<cv::Point>> contours, cv::Scalar color);
    • image:目标图像
    • contours:多边形的顶点坐标
    • color:填充颜色
  8. 绘制箭头:

    cv::arrowedLine(image, cv::Point pt1, cv::Point pt2, cv::Scalar color, int thickness, int line_type, int tipLength);
    • image:目标图像
    • pt1 和 pt2:箭头的起点和终点坐标
    • color:箭头的颜色
    • thickness:线条的粗细
    • line_type:线条的类型
    • tipLength:箭头的尖端长度

测试例子

在C++中使用OpenCV库可以轻松实现在图像上绘制矩形框、文字、圆、椭圆、线段、多边形等各种图形和操作。以下是一些示例代码来演示如何在图像上执行这些操作:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

int main() {
    // 创建一个空白图像
    cv::Mat image = cv::Mat::zeros(400, 400, CV_8UC3);

    // 在图像上绘制矩形框
    cv::rectangle(image, cv::Point(50, 50), cv::Point(150, 150), cv::Scalar(0, 0, 255), 2);

    // 在图像上绘制文字
    cv::putText(image, "OpenCV", cv::Point(160, 180), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);

    // 在图像上绘制圆
    cv::circle(image, cv::Point(200, 200), 50, cv::Scalar(0, 255, 0), 2);

    // 在图像上绘制椭圆
    cv::ellipse(image, cv::Point(300, 300), cv::Size(60, 40), 45, 0, 360, cv::Scalar(255, 0, 0), 2);

    // 在图像上绘制线段
    cv::line(image, cv::Point(50, 200), cv::Point(150, 300), cv::Scalar(255, 0, 255), 2);

    // 在图像上绘制多边形(五角星)
    std::vector<cv::Point> star_points;
    star_points.push_back(cv::Point(250, 50));
    star_points.push_back(cv::Point(265, 100));
    star_points.push_back(cv::Point(305, 100));
    star_points.push_back(cv::Point(280, 130));
    star_points.push_back(cv::Point(295, 175));
    star_points.push_back(cv::Point(250, 150));
    star_points.push_back(cv::Point(205, 175));
    star_points.push_back(cv::Point(220, 130));
    star_points.push_back(cv::Point(195, 100));
    star_points.push_back(cv::Point(235, 100));
    cv::polylines(image, star_points, true, cv::Scalar(255, 255, 0), 2);

    // 在图像上绘制贝叶斯曲线
    cv::Mat curve_image = cv::Mat::zeros(400, 400, CV_8UC3);
    std::vector<cv::Point> curve_points;
    for (int x = 0; x < curve_image.cols; x++) {
        int y = 200 - static_cast<int>(50 * sin(x * 0.05));
        curve_points.push_back(cv::Point(x, y));
    }
    cv::polylines(curve_image, curve_points, false, cv::Scalar(0, 255, 255), 2);
    
        // 创建一个子图,将子图绘制到图片上
        // 创建子图像(ROI)
        cv::Rect roi_rect(100, 100, 200, 150);  // 在(100, 100)位置创建一个200x150的子图像
        cv::Mat roi = image(roi_rect);

        // 在子图像上绘制一个矩形
        cv::rectangle(roi, cv::Point(20, 20), cv::Point(180, 130), cv::Scalar(0, 0, 255), 2);

        // 在子图像上绘制文字
        cv::putText(roi, "Subimage", cv::Point(40, 40), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);

    // 显示图像
    cv::imshow("Shapes", image);
    cv::imshow("Sin Curve", curve_image);

    // 等待按键
    cv::waitKey(0);

    return 0;
}

上述示例代码创建了一个400x400的空白图像,然后在图像上绘制矩形框、文字、圆、椭圆、线段和多边形(五角星),以及一个sin曲线 子图。您可以根据需要修改图形的位置、颜色、大小等参数。请确保您的C++项目中已正确包含OpenCV库并已配置编译环境。文章来源地址https://www.toymoban.com/news/detail-741923.html

到了这里,关于opencv中绘制图像的函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【实操】python opencv将图片合成视频,并插入音频

    简介:将一组图片合成视频,并插入音频。用到opencv,ffmpy,pydub等库。 目录 一、统一图片大小及类型,并按数字排序 二、图片合成视频 三、音频的合并与剪裁 四、音视频融合 opencv基本使用 python对不同尺寸图像改成同一尺寸图像_自动化所副盐的博客-CSDN博客 如何将多张图

    2024年01月16日
    浏览(80)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 视频图像处理基础操作 之 视频捕获/存储/提取/合成/合并

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 视频图像处理基础操作 之 视频捕获/存储/提取/合成/合并 一、简单介绍 二、视频处理流程和原理 三、视频的捕获和存储 四、提取视频中的某些帧 五、将图片合成为视频 六、多个视频合并 Python是一种跨平台的计算机程序设计

    2024年04月10日
    浏览(123)
  • opencv 将多帧图像合成为视频 cv2.VideoWriter()

    将文件夹下有时间戳或者有序的 *.jpg 图像合成为一个 mp4 格式的视频。 附加:加进度条看合成进度。 以上示例合成视频为 mp4 格式,如需合成其它视频格式,可修改 cv2.VideoWriter_fourcc() 参数。请自行查询相关参数。

    2024年02月11日
    浏览(43)
  • opencv-21 alpha 通道详解(应用于 图像增强,合成,蒙版,特效 等)

    Alpha通道是 计算机图形学中用于表示图像透明度的一种通道 。在一个图像中,通常会有三个颜色通道:红色(R)、绿色(G)、蓝色(B),它们合在一起形成彩色图像。而Alpha通道是第四个通道,用于描述每个像素的透明度信息。 Alpha通道的取值范围通常是从0到255,其中0代

    2024年02月15日
    浏览(55)
  • 【Python入门教程】基于OpenCV视频分解成图片+图片组合成视频(视频抽帧组帧)

            在人工智能爆火的今天,深度学习被广泛应用于各个领域。深度学习的模型训练离不开大量的样本库。我之前分享过【Python爬虫】批量爬取网页的图片制作数据集,今天跟大家分享一下如何使用OpenCV库对视频进行抽帧,从而增加样本图片的数量。正好也顺便分享一下

    2024年02月04日
    浏览(54)
  • C++Opencv图像几何绘制

    opencv中提供了绘制矩形的函数rectangle() 参数解释: pt1:矩形的一个顶点 pt2:矩形中与pt1相对的顶点,即两个点在对角线上。 rec:矩形左上角定点和长宽。 Scalar:颜色bgr thickness:线宽 lineType: 线型 shift: 坐标点的小数点位数 该函数利用两点确定一条直线的方式在图像中画出

    2024年02月16日
    浏览(34)
  • 使用OpenCV在图像上绘制质心

    这段代码中已经实现了在图像上绘制质心的功能。质心,也称为重心,是物体质量分布的几何中心,可以通过物体质量和位置的加权平均来求得。 在这个程序中,图像的质心(重心)是通过计算像素强度(可以被看作是“质量”)的加权平均位置得到的。图像上每一个像素都

    2024年02月11日
    浏览(51)
  • 【OpenCV • c++】基础图像的绘制

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年02月11日
    浏览(45)
  • 【OpenCV在图片上绘制点、圆(C++)】

    也没啥前言好说的,就是做项目时候要绘制点和圆,自己学会了就在这记录一下(其实是好久以前了,一直在草稿箱,人太懒)。请根据自己的实际情况做修改。这是C++版本的,Python其实也差不太多,随缘以后整理。 开始时候我就忘了这句,#includeopencv2/imgproc/imgproc.hpp,结果

    2024年02月11日
    浏览(29)
  • Python|OpenCV-鼠标自动绘制图像(4)

    前言 本文是该专栏的第4篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 在本专栏之前,有详细介绍使用OpenCV绘制图形以及添加文字的方法,感兴趣的同学可往前翻阅查看“Python|OpenCV-绘制图形和添加文字的方法(2)”。 而本文重点来介绍使用OpenCV来 操作鼠标 ,

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包