C++使用OpenCV绘制直线、正方形、椭圆、圆形、方形填充、随机生成直线

OpenCV轮廓检测实战:从原理到C++实现完整流程与参数调优 轮廓检测是计算机视觉中图像分割与形状分析的基础技术,其核心原理是通过边缘检测算法(如Canny算子)识别图像中像素强度突变的区域,从而勾勒出物体的边界。这项技术的价值在于能将原始的像素矩阵转化为结构化的几何信息,为后续的物体识别、测量与分类提供关键输入。在工程实践中,轮廓检测广泛应用于工业自动化(如零件尺寸检测)、医疗影像分析(细胞形态识别)以及自动驾驶(道路标识提取)等场景。本文以C++和OpenCV为工具,深入剖析了`findContours`函数的关键参数(如轮廓检索模式RETR_TREE和轮廓近似方 阅读详情
/*
绘制形状与文字
*/
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

Mat bgImage;
const char* dravdeo_win = "drav shapes and text demo";
void MyLines();   //画直线
void MyRectangle();   
void MyEllipse();
void MyPolyon();
void MyCircle();
void RandomLineDemo();
int main(int argc,char**argv)
{
    
    bgImage = imread("E:/Learning_AI/OpenCV_C++/1.jpg");

    if (bgImage.empty())
    {
        cout << "can't open image" << endl;
    }
    //MyLines();   //绘制直线
    MyRectangle();  //绘制正方形框
    //MyEllipse();   //绘制椭圆
    //MyCircle();   //绘制圆
   // MyPolyon();     //填充
   // RandomLineDemo();   //随机生成
   // putText(bgImage, "HELLO OpenCV", Point(300, 300),
    // 4,2.0, Scalar(100, 0, 200), 5, 8);     //在图片上写字
    namedWindow("output image", WINDOW_NORMAL);
    imshow("output image", bgImage);

    waitKey(0);
    return 0;
}

void MyLines()    //绘制直线
{
    //Point 打印Point(第一个点在x轴上的位置,第一个点在y轴上的位置)
  // 采用两点连线的方式划线
    Point p1 = Point(20,30);
    Point p2;
    p2.x = 300;
    p2.y = 300;
    Scalar color = Scalar(0, 0, 255);   //定义线的颜色
    line(bgImage, p1, p2, color, 10, LINE_AA);
    //图片名,第一个点,第二个点,线的颜色,线的厚度,线型
}
void MyRectangle()
{  //Rect(方框在x轴的位置,方框在y轴的位置,方框的宽,方框的高)
    Rect rect = Rect(100, 500, 100, 500);
    Scalar color = Scalar(0, 0, 255);   //方框的颜色
    rectangle(bgImage, rect, color, 10, LINE_8); 
    //方形(图像的窗口,方框的)
}
void MyEllipse()
{
    Scalar color = Scalar(255, 0, 0);
    ellipse(bgImage, Point(bgImage.cols / 2, bgImage.rows / 2), Size(bgImage.cols / 4, bgImage.rows / 8),45, 0, 360, color, 10, LINE_8);
                                                                                                         //45倾斜度,360画椭圆的完成度 
}

void MyCircle()
{

    Scalar color = Scalar(0, 0, 255);
    Point center = Point(bgImage.cols / 2, bgImage.rows / 2);
    circle(bgImage, center, 150, color, 2, 8);
}
void MyPolyon()   //图形填充
{
    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()   //生成随机线条划线
{
  //1.创建空白窗口
    Mat bg = Mat::zeros(bgImage.size(), bgImage.type());
    RNG rng(12345); //随机数生成
    Point pt1;
    Point pt2;
    namedWindow("random line demo", 1);
    for (int i = 0; i < 1000; i++)
    {
        pt1.x = rng.uniform(0, bgImage.cols);
        pt2.x = rng.uniform(0, bgImage.cols);
        pt1.y = rng.uniform(0, bgImage.rows);
        pt2.y = rng.uniform(0, bgImage.rows);
        Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
        if(waitKey(50)>0)    //按空格键退出
        {  
           //保存图片并退出
            imwrite("E:/Learning_AI/OpenCV_C++/demo.jpg", bg);
            break;   
        }
        line(bg, pt1, pt2, color, 1, 8);
        imshow("random line demo", bg);
    }
}
激光振镜矫正全流程:从畸变原理到开放式系统实战 在精密激光加工领域,非线性误差和光学畸变是影响图形精度的核心挑战。其原理源于振镜电机、光学镜片及安装误差等因素耦合,导致实际光斑位置偏离理论指令。通过建立数学映射模型进行补偿,是提升系统定位精度的关键技术。该技术价值在于将加工精度从亚毫米级提升至微米级,直接决定了激光打标、焊接、切割等场景的图形保真度与加工质量。本文聚焦于开放式激光振镜系统,深入解析如何通过多项式拟合和视觉测量,系统性实现振镜矫正,涵盖从枕形/桶形畸变分析到热漂移应对的完整工程实践。 阅读详情

相关推荐

c++ 使用opencv来绘制各种图形(持续更新)

C++ 使用opencv来绘制各种图形

weixin_43896283的博客 1275

opencv基础图形的绘制

本篇文章来讲解使用opencv绘制基础图形。本篇文章就讲解到这里,下篇文章进行opencv摄像头和MP4文件的读取。

m0_49476241的博客 1095

【OpenCV】 基础入门(四)基础图像的绘制

其中第一个参数表示目标图片,第二个参数表示椭圆的中心,第三个参数表示椭圆主轴大小的一半,第四个参数表示以度为单位的椭圆旋转角度,第五个参数表示椭圆弧的起始角度,以度为单位,第六个参数表示椭圆弧的结束角度,以度为单位,第七个参数表示椭圆颜色,第八个参数表示椭圆弧轮廓的厚度,第九个参数表示椭圆边界的类型,第十个参数表示中心坐标和轴值中的小数位数。第一个参数表示目标图片,第二个参数表示圆的中心,第三个参数表示圆的半径,第四个参数表示圆的颜色,第五个参数表示圆形轮廓的粗细(如果为正)。轴坐标为 8 的二维点。

Ceylan__的博客 2839

opencv--------绘制直线、矩形、圆、椭圆、多边形、填充

opencv--------绘制直线、矩形、圆、椭圆、多边形、填充

LYSSLQ2015的博客 1620

OpenCV4(C++)—— 几何图形的绘制

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考。

qq_43199575的博客 1502

相机标定工具箱:从针孔到鱼眼,多模型多标定板实战指南

相机标定是计算机视觉和机器人感知的基石,其核心原理是通过建立三维世界点与二维图像点之间的映射关系,求解相机的内部参数(内参)和外部姿态(外参)。这一过程的技术价值在于为后续的三维重建、视觉SLAM和精确测量提供了准确的几何约束。在实际工程中,针对不同的镜头(如常规镜头、广角镜头、鱼眼镜头)和场景需求,需要灵活选用合适的相机模型(如针孔模型、Kannala-Brandt鱼眼模型)与标定板(如棋盘格、圆形网格、ArUco板)。本文聚焦于一个集成了多种相机模型与标定板的综合性工具箱,深入解析了其支持的**针孔模型

weixin_34367257的博客 455

用C++在OpenCV中绘制直线、正方形、椭圆、圆形、方形填充、随机生成直线

本文是在学习时所作的学习笔记较为简陋,在此与诸君共勉: 在OpenCV中绘制直线、正方形、椭圆、圆形、方形填充、随机生成直线 /* 绘制形状与文字 */ #include <iostream> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; Mat bgImage; const char* dravdeo_win = "drav shapes and text demo"; void My

weixin_45584297的博客 2602

相机标定工具包:支持多模型与标定板,实现高精度内参与双目立体标定

相机标定是计算机视觉与机器人感知的基础,其核心在于建立像素坐标与三维物理世界之间的精确映射关系。通过数学模型(如针孔模型、鱼眼模型)描述光线通过镜头成像的过程,并利用标定板作为已知尺寸的参照物,可以求解出相机的内参(焦距、主点)和畸变参数。这一过程的技术价值在于为三维重建、视觉SLAM、自动驾驶等应用提供准确的几何感知基础。在实际工程中,标定板的类型(如棋盘格、圆形网格、ChArUco板)和相机的镜头模型(如普通镜头、鱼眼镜头)多种多样,需要针对性的标定方案。本项目提供的相机标定工具包,正是为了解决这一痛点

weixin_34221332的博客 363

【OpenCV】 绘制直线、正方形、椭圆、圆形、方形填充、随机生成直线绘制文字

【代码】【OpenCV】 绘制直线、正方形、椭圆、圆形、方形填充、随机生成直线绘制文字。

格物致知 421

SAP期初库存导入 (1)

LSMW

IT养家 7192

TI C2000 , .cmd文件,.TI.ramfunc,将程序分配为在RAM中运行/Flash运行的配置方法和原理讲解,(如28375S ,280049,28335等等芯片)

1 基础知识讲解 1.1 在RAM中运行还是在flash中运行指的是什么? 1.1.1 背景:程序编译完之后生成的.bin文件,.bin文件中包含代码段,代码段中全是汇编指令,而汇编指令中包含多个函数,各函数头的地址不同,如存在A函数和B函数,假设RAM地址区间是0x0000-0x8000,flash的地址区间是0xA000-0xF000,A函数要调用B函数,则A函数调用B函数的那段汇编指令中包含的是B函数头的存储地址,A函数和B函数都在flash中有存储 1.1.2 情况1:B函数是配置为在RAM中运行,

weixin_43776284的博客 8070

opencv 表识别 工业表智能识别 数字式表盘识别,指针式表盘刻度识别,分为表检测,表盘纠正...

opencv 表识别 工业表智能识别 数字式表盘识别,指针式表盘刻度识别,分为表检测,表盘纠正,刻度分割,刻度拉直识别第一,检测表盘第二,然后,把表盘区域 ROI 出来第三,然后,送到分割模型中把表盘中的指针和时刻,分割出来,然后,把圆形表盘,拉直,拉成一条线,看当时时刻在哪条线,把表盘中的指针和时刻,分割出来,分割出来的是圆形的,分割出来的,只有刻度和指针,但是是圆形的,拉成直线,圆,变换成直线,然后,看当前指针指到哪个刻度。

2401_87358448的博客 1049

腾讯云智后台开发实习面试全纪录(已offer)

腾讯云智后台开发实习面经

wenwenaier的博客 5906

基于OpenCV的工业表智能识别技术:数字式表盘和指针式表盘的准确定位与刻度识别

opencv 表识别 工业表智能识别 数字式表盘识别,指针式表盘刻度识别,分为表检测,表盘纠正,刻度分割,刻度拉直识别第一,检测表盘第二,然后,把表盘区域 ROI 出来第三,然后,送到分割模型中把表盘中的指针和时刻,分割出来,然后,把圆形表盘,拉直,拉成一条线,看当时时刻在哪条线,把表盘中的指针和时刻,分割出来,分割出来的是圆形的,分割出来的,只有刻度和指针,但是是圆形的,拉成直线,圆,变换成直线,然后,看当前指针指到哪个刻度。

2503_94141438的博客 1856

Win10网络图标消失,网络图标变成灰色,打开网络设置闪退等问题解决

介绍 主要解决如下问题 网络图标消失 常用方法配置中出现的网络图标变成灰色没有办法打开 打开网络和Internet闪退 错误提示`网络发现已关闭。网络计算机和设备不可见。请启动网络和共享中心的网络发现。 连不上网,诊断结果为 依赖服务或组无法启动 这个问题大概率通过重装系统不能解决,请大家谨慎测试之后最后选择重装这个路线。 方法1:这一步一定要做(卸载三方软件) 把360安全卫士,软件管家这些东西都卸载掉。 我的问题一开始就是这个软件引起的,可能他检测到我还给台式机配了无线网卡,然后就把有线网络的一些

呆呆象呆呆的博客 3万+

黑猫带你学UFS协议第13篇:UFS初始化详解(Boot Operation)

本文详细解析了UFS设备的初始化过程,包括部分初始化、加载启动代码(可选)和初始化完成三个阶段。重点介绍了如何通过设备描述符和逻辑单元描述符配置引导特性,以及如何从UFS设备加载启动代码。内容适用于嵌入式硬件和存储领域的开发者。

黑猫奥利奥的博客 3555

OpenCV学习笔记

学习视频4h上手C++版Opencv_哔哩哔哩_bilibili。

丰锋的博客 71

NOTE: When using the `ipython kernel` entry point, Ctrl-C will not work.解决方案

本文主要介绍了NOTE: When using the `ipython kernel` entry point, Ctrl-C will not work.解决方案,希望能对使用jupyter notebook的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

OpenCV 实现工业表智能识别:数字式表盘和指针式表盘的刻度识别及纠正

opencv 表识别 工业表智能识别 数字式表盘识别,指针式表盘刻度识别,分为表检测,表盘纠正,刻度分割,刻度拉直识别第一,检测表盘第二,然后,把表盘区域 ROI 出来第三,然后,送到分割模型中把表盘中的指针和时刻,分割出来,然后,把圆形表盘,拉直,拉成一条线,看当时时刻在哪条线,把表盘中的指针和时刻,分割出来,分割出来的是圆形的,分割出来的,只有刻度和指针,但是是圆形的,拉成直线,圆,变换成直线,然后,看当前指针指到哪个刻度。

2502_94431433的博客 168

实验7:机器学习油田产量预测-代码数据-完整代码数据可直接运行-计算机毕设

实验7:机器学习油田产量预测-代码数据-完整代码数据可直接运行-计算机毕设

机器学习深度学习业余选手 479

【Bug已解决】npm install -g @anthropic-ai/claude-code 出现 EACCES: permission denied 解决方案

方案适用场景推荐指数nvm 管理 Node长期开发环境,一次配置永久生效⭐⭐⭐⭐⭐修改 npm 全局目录不想引入 nvm,快速解决⭐⭐⭐⭐修复现有目录权限之前用过 sudo 装包,需要修复⭐⭐⭐Windows 管理员/改目录Windows 平台专用⭐⭐⭐⭐官方原生安装脚本想彻底避开 npm 权限问题⭐⭐⭐⭐报的本质是npm 全局安装目录的属主权限与当前执行用户不匹配,而不是 npm 或 Claude Code 本身有问题。不要用sudo"强行"解决。

一键难忘的博客 1万+

工业视觉笔记快捷搜索---目录

工业视觉需要时可抄的代码---持续更新 一(1-28)目录1、批量访问图片,等待键盘1.2 批量访问图像(不用提前批量重命名)--访问文件夹底下所有同类型图像1.2.1 单独只有批量访问的1.3 批量访问图像(也是不用提前批量重命名)--访问文件夹底下所有同类型图像1.4 批量访问图像(也是不用提前批量重命名)--访问文件夹底下所有同类型图像1.5 批量访问图像(不用提前批量重命名)--单张和批量前面路径相同(jiefeng)1.6 批量访问图像(不用提前批量重命名)--单张和批量前面路径相同(bioake

weixin_47059239的博客 1535

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

51c视觉~CV~合集3

基于深度学习的方法在某些工业产品的表面缺陷识别和分类方面表现出优异的性能, 然而大多数工业产品缺陷样本稀缺, 而且特征差异大, 导致这类需要大量缺陷样本训练的检测方法难以适用. 提出一种基于重构网络的无监督缺陷检测算法, 仅使用容易大量获得的无缺陷样本数据实现对异常缺陷的检测. 提出的算法包括两个阶段: 图像重构网络训练阶段和表面缺陷区域检测阶段. 训练阶段通过一种轻量化结构的全卷积自编码器设计重构网络, 仅使用少量正常样本进行训练, 使得重构网络能够生成无缺陷重构图像, 进一步提出一种结合结构性损失和L1

whaosoft~aiotの开发板商城 3059

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

基于YOLOv8关键点检测的工业仪表智能读数实战指南

计算机视觉中的目标检测与关键点检测技术,是机器感知和理解物理世界的基础。目标检测负责定位物体,而关键点检测则能精确识别物体的特定部位,二者结合为复杂视觉任务提供了高效解决方案。在工业自动化领域,这种技术组合展现出巨大价值,能够替代传统人工,实现高效、精准的物理量数字化。指针式圆形仪表广泛存在于能源、制造等行业的监控场景,其读数自动化是智能运维的关键环节。本文以YOLOv8模型为核心,详细阐述了如何利用其混合任务能力,通过仪表盘检测矫正、指针关键点定位、几何计算映射三个核心步骤,构建一个鲁棒的工业视觉读数系统

weixin_34138056的博客 390

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Opencv(C++)笔记--绘制直线、矩形、椭圆、圆、填充多边形、绘制字体和随机产生坐标点

绘制字体,传入的参数依次为:背景图、要绘制的字体内容、文本框左下角坐标、字体、尺寸因子(值越大字体越大)、颜色、线宽和线型;绘制直线,传入的参数依次为:背景图、两个点的坐标、直线的颜色、直线的线宽和直线的线型;填充多边形,传入的参数依次为:背景图、点的坐标、点的个数、线宽、颜色和线型;绘制圆,传入的参数依次为:背景图、中心点、半径、颜色、线宽和线型;绘制矩形,传入的参数依次为:背景图、矩形框、颜色、线宽和线型;6--cv::putText()绘制字体。1--cv::line()绘制直线。

牵一只蜗牛去散步 4907

计算机图形学 绘制直线(C++)

数值微分法DDA(Digital Differential Analyzer) 它的基本思想是先对一个方向的坐标取单位步长的变化,然后计算另一方向坐标相应的变化值。 void Draw(CDC *pCD,int x1,int y1,int x2,int y2,COLORREF color) { int dx,dy,n,k; double xinc,yinc,x,y; dx = x2-x1; ...

Ramiro Luo的博客 1万+
上一篇: Segment Anything中将生成的多个mask结果拼接在一起,可视化(批量处理)
下一篇: 卸载WSL下的ubuntu子系统
YL_python_C++_java
博客等级 码龄7年 1392粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值