使用opencv在图像上画带刻度线的十字线,以图像中心点为0点

news2024/10/5 19:06:24

 使用OpenCV在图像上绘制带刻度线的十字线,可以通过以下步骤实现。我们将首先找到图像的中心点,然后绘制水平和垂直线,并在这些线的适当位置绘制刻度线。以下是详细的C++代码示例:

#include<opencv2\opencv.hpp>
//画十字标注线带刻度线,以图像中心点为0点
void DrawCross_new(cv::Mat& mat, double dFactor)
{
    cv::Scalar color = cv::Scalar(0, 0, 255);

    if (mat.empty())
    {
        return;
    }
    int nSizeFace = cv::FONT_HERSHEY_PLAIN;
    int ShortLineSize = 6;
    int LenghtLineSize = 12;
    double testsie = 0.35;
    int Linesize = 1;
    cv::Point CenterPoint = cv::Point(mat.cols / 2.0, mat.rows / 2.0);
    cv::Point Point{};

    //画十字对角
    cv::line(mat, cv::Point(CenterPoint.x, 0), cv::Point(CenterPoint.x, mat.rows), color, 1);//竖线
    cv::line(mat, cv::Point(0, CenterPoint.y), cv::Point(mat.cols, CenterPoint.y), color, 1);//横线


    //画X左刻度线
    for (int i_left = 1; i_left < int(CenterPoint.x / dFactor) + 1; i_left++)
    {
        Point = cv::Point(CenterPoint.x - dFactor * i_left, CenterPoint.y);
        if (i_left % 5 == 0) {
            //画长线
            cv::line(mat, Point, cv::Point(Point.x, Point.y - LenghtLineSize), color, Linesize);//横线
            cv::putText(mat, std::to_string(i_left), cv::Point(Point.x - dFactor, Point.y - LenghtLineSize - 5), cv::FONT_HERSHEY_SIMPLEX, testsie, color, 1);
        }
        else
        {
            //画短线
            cv::line(mat, Point, cv::Point(Point.x, Point.y - ShortLineSize), color, Linesize);//横线
        }


    }

    //画X右刻度线
    for (int i_right = 1; i_right < int(CenterPoint.x / dFactor) + 1; i_right++)
    {
        Point = cv::Point(CenterPoint.x + dFactor * i_right, CenterPoint.y);
        if (i_right % 5 == 0) {
            //画长线
            cv::line(mat, Point, cv::Point(Point.x, Point.y - LenghtLineSize), color, Linesize);//横线
            cv::putText(mat, std::to_string(i_right), cv::Point(Point.x - dFactor, Point.y - LenghtLineSize - 5), cv::FONT_HERSHEY_SIMPLEX, testsie, color, 1);
        }
        else
        {
            //画短线
            cv::line(mat, Point, cv::Point(Point.x, Point.y - ShortLineSize), color, Linesize);//横线
        }


    }

    //画Y上刻度线

    for (int i_up = 1; i_up < int(CenterPoint.y / dFactor) + 1; i_up++)
    {
        Point = cv::Point(CenterPoint.x, CenterPoint.y - dFactor * i_up);
        if (i_up % 5 == 0) {
            //画长线
            cv::line(mat, Point, cv::Point(Point.x - LenghtLineSize, Point.y), color, Linesize);//横线
            cv::putText(mat, std::to_string(i_up), cv::Point(Point.x - LenghtLineSize * 3, Point.y + dFactor / 2.0), cv::FONT_HERSHEY_SIMPLEX, testsie, color, 1);
        }
        else
        {
            //画短线
            cv::line(mat, Point, cv::Point(Point.x - ShortLineSize, Point.y), color, Linesize);//横线
        }


    }

    //画Y下刻度线
    for (int i_down = 1; i_down < int(CenterPoint.y / dFactor) + 1; i_down++)
    {
        Point = cv::Point(CenterPoint.x, CenterPoint.y + dFactor * i_down);
        if (i_down % 5 == 0) {
            //画长线
            cv::line(mat, Point, cv::Point(Point.x - LenghtLineSize, Point.y), color, Linesize);//横线
            cv::putText(mat, std::to_string(i_down), cv::Point(Point.x - LenghtLineSize * 3, Point.y + dFactor / 2.0), cv::FONT_HERSHEY_SIMPLEX, testsie, color, 1);
        }
        else
        {
            //画短线
            cv::line(mat, Point, cv::Point(Point.x - ShortLineSize, Point.y), color, Linesize);//横线
        }


    }
}
//测试程序
int main() {
	// 创建一个空白图像
	int width = 800;
	int height = 600;
	cv::Mat image = cv::Mat::zeros(height, width, CV_8UC3);
	int tickLength = 5;  
	// 绘制带刻度线的十字线
	DrawCross_new(image, tickLength);
	// 显示图像
	cv::imshow("Crosshair with Ticks", image);
	cv::waitKey(0);

	return 0;
}

 绘画的结果如下图所示:

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

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

相关文章

职场奋斗10年,到此结束,享年38

职场奋斗10年&#xff0c;到此结束&#xff0c;享年38 昨天一个粉丝&#xff0c;上来就给我转2000大洋&#xff0c;说有问题想问我&#xff0c;看完他的问题&#xff0c;直接把钱退给了他&#xff0c;估计又有人要说我脑壳长包了。 主动送上门的钱谁不想要&#xff1f;主要是…

【人工智能】第三部分:ChatGPT的应用场景和挑战

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

深入探索:十种流行的深度神经网络及其运作原理

算法 深入探索&#xff1a;十种流行的深度神经网络及其运作原理一、卷积神经网络&#xff08;CNN&#xff09;基本原理工作方式 二、循环神经网络&#xff08;RNN&#xff09;基本原理工作方式 三、长短期记忆网络&#xff08;LSTM&#xff09;基本原理工作方式 四、门控循环单…

Win10系统无法安装msi文件问题

winR输入services.msc打开服务 找到Windows Installer并启动 输入msiexec /package “msi文件路径”

SpringBoot集成ireport打印,并解决PDF中文显示问题

1、相关jar包引入 <!-- ireport报表相关 start--><dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>4.5.1</version><exclusions><exclusion><groupId…

Django视图层探索:GET/POST请求处理、参数传递与响应方式详解

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

docker pull image 报错 dial tcp 31.13.88.169:443: i/o timeout

一、错误重现 error pulling image configuration: download failed after attempts6: dial tcp 31.13.88.169:443: i/o timeout 在执行docker build构建镜像&#xff0c;拉取镜像时报错 或者直接docker pull镜像时报错 实质都是拉取镜像源超时报错&#xff0c;那么就是镜像源…

[数据集][目标检测]室内积水检测数据集VOC+YOLO格式761张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;761 标注数量(xml文件个数)&#xff1a;761 标注数量(txt文件个数)&#xff1a;761 标注类别…

《接口自动化测试框架》代码片段 - 文件和目录操作封装

抛砖引玉 在Python中&#xff0c;文件和目录的操作是一项基础且频繁的任务。 Python提供了一系列强大的内置函数和模块&#xff0c;使得这些操作变得既简单又高效。 这些工具极大地简化了对文件和目录的各种操作&#xff0c;从创建新文件、读取数据、写入内容&#xff0c;到删除…

易语言QQ机器人2.0源码

易语言QQ机器人2.0 效果图源码说明领取源码下期更新预报 效果图 源码说明 .程序集 Smessage, VJ_DirectUI .程序集变量 Format, StringFormat.子程序 _初始化, , , 当基于本类的对象被创建后&#xff0c;此方法会被自动调用.子程序 _销毁, , , 当基于本类的对象被销毁前&#x…

mysql当前状态分析(show status)

文章目录 查看当前线程数据查询连接情况查询缓存相关查询锁相关查询增删改查执行次数查询DDL创建相关 SHOW STATUS 是一个在 MySQL 中用来查看服务器运行状态的命令。它可以帮助你了解服务器的当前性能&#xff0c;包括连接数、表锁定、缓冲区使用情况等信息。 查看当前线程数据…

【Java】解决Java报错:ConcurrentModificationException

文章目录 引言1. 错误详解2. 常见的出错场景2.1 遍历过程中修改集合2.2 使用 Iterator 进行删除操作 3. 解决方案3.1 使用 Iterator 的 remove 方法3.2 使用 CopyOnWriteArrayList3.3 使用 synchronized 块 4. 预防措施4.1 使用线程安全的集合类4.2 使用合适的遍历和修改方法4.…

大模型安全技术实践 | RAG精确应对大模型敏感问题知识幻觉难题

一、引言 在大模型的实际应用落地过程中&#xff0c;会遇到所谓的幻觉&#xff08;Hallucination&#xff09;问题。对于语言模型而言&#xff0c;当生成的文本语法正确流畅&#xff0c;但与原文不符&#xff08;Faithfulness&#xff09;或事实不符&#xff08;Factualness&a…

【51单片机】智能百叶窗项目

文章目录 功能演示&#xff1a;前置要求&#xff1a;主要功能&#xff1a;主要模块&#xff1a;主函数代码&#xff1a; 具体的仿真程序和代码程序已经免费放置在资源中&#xff0c;如有需要&#xff0c;可以下载进行操作。 功能演示&#xff1a; 前置要求&#xff1a; 编译软…

气膜建筑的照明设计:智能与高效的完美结合—轻空间

气膜建筑作为一种新型的建筑形式&#xff0c;因其独特的结构和材料&#xff0c;带来了多样化的功能和应用场景。在气膜建筑的设计中&#xff0c;照明设计是一个重要的环节&#xff0c;直接关系到建筑内部的使用体验和能源利用效率。本文将详细探讨气膜建筑的照明设计如何实现智…

QFI 2024年第二季度創羽計畫再次啟動,臺灣分部學員迎來最後的絕佳機會並獲得專案補助資格

Quantum Financial Insights (QFI) 在2024年第二季度的綜合表現不凡,無論是在社群用戶、交易量、綜合獲益值還是股價等方面,都展現出非常出色的優異表現,持續受到各國金融界、財團法人及國內外媒體的密切關注。QFI於正式宣佈,將贈予臺灣分部20個創羽案名額,這是該計畫原先已經結…

快速入门链路追踪sleuth整合zipkin(代码演示)

1、演示项目背景 2、pom.xml 3、启动项目 4、测试 5、保存数据到数据库 6、通过mq保存数据到mysql 7、通过mq保存数据到es 1、演示项目背景 下载zipkin&#xff0c;建议使用2.x版本的&#xff0c;3.x版本的要求jdk高版本。如果自己是1.8&#xff0c;就下载2.x的 下载地…

Win11 ubuntu子系统安装WslRegisterDistribution failed with error: 0x800701bc

执行完这两部&#xff0c;然后再打开ubuntu即可。链接

GitHub生成SSH密钥,使用SSH进行连接

目录 一、生成新的SSH密钥 二、添加新的SSH密钥 三、测试SSH连接 四、SSH密钥密码 五、创建新仓库并推送到github 说明 使用 SSH URL 将 git clone、git fetch、git pull 或 git push 执行到远程存储库时&#xff0c; 须在计算机上生成 SSH 密钥对&#xff0c;并将公钥添加到…

YOLOv10:实时端到端目标检测的新突破

目标检测作为计算机视觉领域的一个核心问题&#xff0c;其关键在于能够在图像中准确识别并定位对象。随着深度学习技术的发展&#xff0c;基于深度神经网络的目标检测方法不断涌现&#xff0c;其中YOLO&#xff08;You Only Look Once&#xff09;系列算法以其优异的实时性和准…