分享

OpenCV-绘制虚线

 翟天保的图书馆 2024-06-19 发布于上海

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

功能函数

// 绘制虚线
void DrawDottedLine(cv::Mat &input, cv::Point p1, cv::Point p2, cv::Scalar color, int thickness, int len)
{
	// 分段
	double line_length = std::sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y));
	double num_dashes = line_length / len;
	double x_increment = (p2.x - p1.x) / num_dashes;
	double y_increment = (p2.y - p1.y) / num_dashes;
	// 间隔绘制
	for (int i = 0; i < num_dashes; ++i) 
	{
		if (i % 2 == 0) {
			cv::Point start(p1.x + i * x_increment, p1.y + i * y_increment);
			cv::Point end(p1.x + (i + 1) * x_increment, p1.y + (i + 1) * y_increment);
			cv::line(input, start, end, color, thickness);
		}
	}
}

测试代码

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

// 绘制虚线
void DrawDottedLine(cv::Mat &input, cv::Point p1, cv::Point p2, cv::Scalar color, int thickness, int len)
{
	// 分段
	double line_length = std::sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y));
	double num_dashes = line_length / len;
	double x_increment = (p2.x - p1.x) / num_dashes;
	double y_increment = (p2.y - p1.y) / num_dashes;
	// 间隔绘制
	for (int i = 0; i < num_dashes; ++i) 
	{
		if (i % 2 == 0) {
			cv::Point start(p1.x + i * x_increment, p1.y + i * y_increment);
			cv::Point end(p1.x + (i + 1) * x_increment, p1.y + (i + 1) * y_increment);
			cv::line(input, start, end, color, thickness);
		}
	}
}

int main()
{
	// 绘制虚线
	cv::Mat test = cv::Mat::zeros(100, 100, CV_8UC1);
	cv::Point p1(20, 20);
	cv::Point p2(80, 80);
	DrawDottedLine(test, p1, p2, cv::Scalar(255), 1, 3);
	return 0;
}

测试效果 

       这是斜向线和水平的效果图。可以通过调节len来改变虚线中实线的长度。

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多