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

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

cpp 复制代码
#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;
}

绘画的结果如下图所示:

相关推荐
大郭鹏宇2 分钟前
LangChain Model I/O 完全指南:从模型调用到多平台实战
人工智能
2601_956414146 分钟前
AI生成的材质不够真实,该如何在平台内优化?V2Fun里的材质修正流程
人工智能·材质
没落英雄7 分钟前
5. 从零开始搭建一个 AI Agent —— 人机协作与中断恢复
前端·人工智能·架构
YFJ_mily11 分钟前
**Python 实战:写一个论文 PDF 投稿自检工具|附 IPAT 2026 智能光子学会议征稿信息
人工智能·python·pdf·量子计算·论文投稿·智能光子学
科技发布13 分钟前
广告投放首选:传播易、朝闻通、拓氪科技三大营销平台
人工智能·科技
孟郎郎21 分钟前
AI 辅助开发编程敏感信息保护安全规范
人工智能·安全·ai·风险·隐患
财迅通Ai24 分钟前
南华期货半年净利预期高增,稀缺自主清算壁垒驱动跨境业务规模放量
大数据·人工智能·区块链·南华期货
今夕资源网26 分钟前
AI声音克隆软件 CosyVoice今夕一键整合包解压即用 阿里巴巴通义实验室开源 github斩获22K星标
人工智能·github·多国语言·声音克隆·零样本语音克隆·感情·ai语音克隆
CIO_Alliance39 分钟前
iPaaS概念原理(2)| iPaaS的架构模型是怎样的?
人工智能·低代码·架构·ipaas·系统集成
nanawinona44 分钟前
2026年AI量化工具怎么选,先定位学习开发还是执行
人工智能·python