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

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

复制代码
void Draw_diagonal(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 = 5;
    int LenghtLineSize = 10;
    int Linesize = 1;
    cv::Point CenterPoint = cv::Point(mat.cols / 2.0, mat.rows / 2.0);
    cv::Point Point{};

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

    double lenghtX = sqrt(pow(CenterPoint.x, 2) + pow(CenterPoint.y, 2));
    double dx = CenterPoint.x / lenghtX;
    double dy = CenterPoint.y / lenghtX;
    //std::cout << lenghtX << std::endl;
        //画左上刻度线
    for (int i_left = 1; i_left < int(lenghtX / dFactor) + 1; i_left++)
    {
        Point = cv::Point(CenterPoint.x - i_left * dFactor * dx, CenterPoint.y - i_left * dFactor * dy);
        if (i_left % 5 == 0) {
            //画长线
            cv::line(mat, Point, cv::Point(Point.x + dy * LenghtLineSize, Point.y - dx * LenghtLineSize), color, Linesize);//横线
        }
        else
        {
            //画短线
            cv::line(mat, Point, cv::Point(Point.x + dy * ShortLineSize, Point.y - dx * ShortLineSize), color, Linesize);//横线
        }


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

    }

    //画右上
    for (int i_left = 1; i_left < int(lenghtX / dFactor) + 1; i_left++)
    {
        Point = cv::Point(CenterPoint.x + i_left * dFactor * dx, CenterPoint.y - i_left * dFactor * dy);
        if (i_left % 5 == 0) {
            //画长线
            cv::line(mat, Point, cv::Point(Point.x - dy * LenghtLineSize, Point.y - dx * LenghtLineSize), color, Linesize);//横线
        }
        else
        {
            //画短线
            cv::line(mat, Point, cv::Point(Point.x - dy * ShortLineSize, Point.y - dx * ShortLineSize), color, Linesize);//横线
        }


    }

    //画左下
    for (int i_left = 1; i_left < int(lenghtX / dFactor) + 1; i_left++)
    {
        Point = cv::Point(CenterPoint.x - i_left * dFactor * dx, CenterPoint.y + i_left * dFactor * dy);
        if (i_left % 5 == 0) {
            //画长线
            cv::line(mat, Point, cv::Point(Point.x - dy * LenghtLineSize, Point.y - dx * LenghtLineSize), color, Linesize);//横线
        }
        else
        {
            //画短线
            cv::line(mat, Point, cv::Point(Point.x - dy * ShortLineSize, Point.y - dx * ShortLineSize), color, Linesize);//横线
        }


    }


}
//测试程序
int main() {
	// 创建一个空白图像
	int width = 800;
	int height = 600;
	cv::Mat image = cv::Mat::zeros(height, width, CV_8UC3);
	int tickLength = 5;   // 刻度长度为10像素

	// 绘制带刻度线的对角线
	Draw_diagonal(image, tickLength);
	// 显示图像
	cv::imshow("Diagonal with Ticks", image);
	cv::waitKey(0);

	return 0;
}

绘画的结果如下图所示:

相关推荐
头发够用的程序员1 小时前
别被 TOPS 参数迷惑:手把手推导边缘 GPU 整型算力
人工智能·python·ubuntu·计算机视觉·硬件架构·边缘计算
jay神2 小时前
深度学习的损失函数怎么选?
人工智能·深度学习·计算机视觉·毕业设计·损失函数
zhaoali07092 小时前
深度学习系列实验-计算机视觉基础
人工智能·深度学习·计算机视觉
西西弗Sisyphus5 小时前
C++ 实现 替代 OpenCV resize INTER_LINEAR 的一种方式
c++·opencv
漂着的圆木5 小时前
GLM-5.3-Flash 接入 Agent Loop:图片验收别只查 OCR
人工智能·计算机视觉·aigc·ai agent
千里码aicood5 小时前
flask基于opencv绘图机器人的系统设定(opencv)
opencv·机器人·flask
EDPJ5 小时前
(2026|CVPR|安大,可学习正常/异常 token,空间感知交叉注意力)VisualAD:基于 ViT 的语言无关零样本异常检测
深度学习·计算机视觉·缺陷检测·异常检测
双翌视觉6 小时前
曝光调不对,算法全白费:机器视觉的曝光三态解析
人工智能·算法·计算机视觉
EDPJ6 小时前
(2023|CVPR|AWS AI Lab,组合式提示集成,多尺度聚合,记忆库,滑动窗)WinCLIP:零样本/少样本异常分类与分割
计算机视觉·视觉语言模型·异常分类·缺陷分割
动物园猫6 小时前
铁路障碍物目标检测数据集:4类别、5,500+张图像 | 目标检测
人工智能·目标检测·计算机视觉