欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > OpenCV绘图函数(3)判断点一条直线是否在一个矩形范围内的函数clipLine()的使用

OpenCV绘图函数(3)判断点一条直线是否在一个矩形范围内的函数clipLine()的使用

2024/10/24 23:17:05 来源:https://blog.csdn.net/jndingxin/article/details/141600274  浏览:    关键词:OpenCV绘图函数(3)判断点一条直线是否在一个矩形范围内的函数clipLine()的使用
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

裁剪线段与图像矩形相交的部分。
cv::clipLine 函数计算出完全位于指定矩形内的线段部分。如果线段完全位于矩形之外,则返回 false。否则,返回 true。
如果线段的一部分或全部位于矩形内,则该函数会调整线段的端点坐标,使得调整后的线段完全位于矩形内。如果线段完全位于矩形之外,则函数返回 false 表示不需要裁剪。如果线段需要裁剪,则函数返回 true,并且会修改传入的线段端点坐标来反映裁剪后的结果

函数原型1

bool cv::clipLine
(Size 	imgSize,Point & 	pt1,Point & 	pt2 
)		

参数1

  • 参数imgSize 图像尺寸。图像矩形定义为 Rect(0, 0, imgSize.width, imgSize.height)。
  • 参数pt1 线段的第一个点。
  • 参数pt2 线段的第二个点。

函数原型2

这是重载的成员函数,为方便提供。它与上面的函数仅在所接受的参数方面有所不同。

bool cv::clipLine
(Size2l 	imgSize,Point2l & 	pt1,Point2l & 	pt2 
)		

参数2

  • 参数imgSize 图像尺寸。图像矩形定义为 Rect(0, 0, imgSize.width, imgSize.height)。
  • 参数pt1 线段的第一个点。
  • 参数pt2 线段的第二个点。

函数原型3

这是重载的成员函数,为方便提供。它与上面的函数仅在所接受的参数方面有所不同。

bool cv::clipLine	
(Rect 	imgRect,Point & 	pt1,Point & 	pt2 
)		

参数3

  • 参数imgRect 图像矩形.
  • 参数pt1 线段的第一个点。
  • 参数pt2 线段的第二个点。

代码示例


#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>int main( int argc, char** argv )
{// 创建一个空白的图像cv::Mat image = cv::Mat::zeros( 512, 512, CV_8UC3 );// 定义线段的起点和终点cv::Point pt1( 100, 100 );  // 起始点cv::Point pt2( 400, 400 );  // 结束点// 定义图像的尺寸cv::Size imgSize( image.cols, image.rows );  // 图像尺寸// 裁剪线段bool clipped = cv::clipLine( imgSize, pt1, pt2 );// 检查裁剪结果if ( clipped ){ std::cout << "线段完全位于图像之内。" << std::endl;  // 如果线段被裁剪,则绘制裁剪后的线段cv::line( image, pt1, pt2, cv::Scalar( 0, 255, 0 ), 2 );}else{// 如果线段完全位于矩形之外,则不绘制std::cout << "线段完全位于图像之外。" << std::endl;}// 显示图像cv::imshow( "Clip Line Example", image );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述
命令行输出:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com