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

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

裁剪线段与图像矩形相交的部分。

cv::clipLine 函数计算出完全位于指定矩形内的线段部分。如果线段完全位于矩形之外,则返回 false。否则,返回 true。

如果线段的一部分或全部位于矩形内,则该函数会调整线段的端点坐标,使得调整后的线段完全位于矩形内。如果线段完全位于矩形之外,则函数返回 false 表示不需要裁剪。如果线段需要裁剪,则函数返回 true,并且会修改传入的线段端点坐标来反映裁剪后的结果

函数原型1

cpp 复制代码
bool cv::clipLine
(
	Size 	imgSize,
	Point & 	pt1,
	Point & 	pt2 
)		

参数1

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

函数原型2

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

cpp 复制代码
bool cv::clipLine
(
	Size2l 	imgSize,
	Point2l & 	pt1,
	Point2l & 	pt2 
)		

参数2

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

函数原型3

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

cpp 复制代码
bool cv::clipLine	
(
	Rect 	imgRect,
	Point & 	pt1,
	Point & 	pt2 
)		

参数3

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

代码示例

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

运行结果

命令行输出:

相关推荐
BFT白芙堂2 分钟前
睿尔曼系列机器人——以创新驱动未来,重塑智能协作新生态(上)
人工智能·机器学习·机器人·协作机器人·复合机器人·睿尔曼机器人
aneasystone本尊8 分钟前
使用 MCP 让 Claude Code 集成外部工具
人工智能
静心问道18 分钟前
SEW:无监督预训练在语音识别中的性能-效率权衡
人工智能·语音识别
xwz小王子24 分钟前
从LLM到WM:大语言模型如何进化成具身世界模型?
人工智能·语言模型·自然语言处理
我爱一条柴ya25 分钟前
【AI大模型】深入理解 Transformer 架构:自然语言处理的革命引擎
人工智能·ai·ai作画·ai编程·ai写作
静心问道26 分钟前
FLAN-T5:规模化指令微调的语言模型
人工智能·语言模型·自然语言处理
李师兄说大模型26 分钟前
KDD 2025 | 地理定位中的群体智能:一个多智能体大型视觉语言模型协同框架
人工智能·深度学习·机器学习·语言模型·自然语言处理·大模型·deepseek
静心问道27 分钟前
SqueezeBERT:计算机视觉能为自然语言处理在高效神经网络方面带来哪些启示?
人工智能·计算机视觉·自然语言处理
Sherlock Ma28 分钟前
百度开源文心一言4.5:论文解读和使用入门
人工智能·百度·自然语言处理·开源·大模型·文心一言·多模态
weisian15133 分钟前
人工智能-基础篇-18-什么是RAG(检索增强生成:知识库+向量化技术+大语言模型LLM整合的技术框架)
人工智能·语言模型·自然语言处理