OpenCV开发笔记(七):OpenCV基础图形绘制

若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/101026612

目录

前言

Demo

基础绘制

绘制直线:line

绘制椭圆:ellipse

绘制矩形:rectangle

绘制圆形:circle

绘制多边形填充:fillPoly

Demo源码

工程模板:对应版本号v1.4.0


OpenCV开发专栏

OpenCV开发笔记(〇):使用mingw530_32编译openCV3.4.1源码,搭建Qt5.9.3的openCV开发环境

OpenCV开发笔记(一):OpenCV介绍、编译

OpenCV开发笔记(二):cvui交互界面

OpenCV开发笔记(三):OpenCV图像的概念和基本操作

OpenCV开发笔记(四):OpenCV图片和视频数据的读取与存储

OpenCV开发笔记(五):OpenCV读取与操作摄像头

OpenCV开发笔记(六):OpenCV基础数据结构、颜色转换函数和颜色空间

OpenCV开发笔记(七):OpenCV基础图形绘制

OpenCV开发笔记(八):OpenCV常用操作之计时、缩放、旋转、镜像

OpenCV开发笔记(九):OpenCV区域图像(ROI)和整体、局部图像混合

OpenCV开发笔记(十):OpenCV图像颜色通道分离和图像颜色多通道混合

持续补充中…

 

    OpenCV开发笔记(七):OpenCV基础图形绘制

前言

       OpenCV基础图形绘制,可用于做图形标记。

 

Demo

 

基础绘制

绘制直线:line

// line
cv::line(mat, cv::Point(30, 30) , cv::Point(370, 30) , cv::Scalar(255, 255, 255), 1);
cv::line(mat, cv::Point(370, 30), cv::Point(370, 370), cv::Scalar(255, 255, 255), 1);
cv::line(mat, cv::Point(370, 370), cv::Point(30, 370), cv::Scalar(255, 255, 255), 1);
cv::line(mat, cv::Point(30, 370), cv::Point(30 , 30), cv::Scalar(255, 255, 255), 1);

绘制椭圆:ellipse

// ellipse
cv::ellipse(mat, cv::Point(50+1, 50+1) , cv::Size(10, 20), 45.0, 0.0, 360.0,
            cv::Scalar(0, 0, 255), 1);
cv::ellipse(mat, cv::Point(50+1, 350-1), cv::Size(10, 20), 135.0, 0.0, 360.0,
            cv::Scalar(0, 0, 255), -1);
cv::ellipse(mat, cv::Point(350-1, 50+1), cv::Size(20, 10), 45.0, 0.0, 360.0,
            cv::Scalar(0, 0, 255), 1);
cv::ellipse(mat, cv::Point(350-1, 350-1), cv::Size(20, 10), 135.0, 0.0, 360.0,
            cv::Scalar(0, 0, 255), -1);

绘制矩形:rectangle

// rectangle
cv::rectangle(mat, cv::Rect(100   , 100   , 20, 20), cv::Scalar(0, 255, 0));
cv::rectangle(mat, cv::Rect(100   , 300-20, 20, 20), cv::Scalar(0, 255, 0));
cv::rectangle(mat, cv::Rect(300-20, 100   , 20, 20), cv::Scalar(0, 255, 0), -1);
cv::rectangle(mat, cv::Rect(300-20, 300-20, 20, 20), cv::Scalar(0, 255, 0), -1);

绘制圆形:circle

// circle
cv::circle(mat, cv::Point(200, 200), 10, cv::Scalar(200, 200, 200), -1);
cv::circle(mat, cv::Point(200, 200), 20, cv::Scalar(200, 200, 200), 1);
cv::circle(mat, cv::Point(200, 200), 30, cv::Scalar(200, 200, 200), 2);
cv::circle(mat, cv::Point(200, 200), 40, cv::Scalar(200, 200, 200), 3);
cv::circle(mat, cv::Point(200, 200), 50, cv::Scalar(200, 200, 200), 4);

绘制多边形填充:fillPoly

// fillPoly
cv::Point rootPoints[1][4];
rootPoints[0][0] = cv::Point(200, 150);
rootPoints[0][1] = cv::Point(250, 200);
rootPoints[0][2] = cv::Point(200, 250);
rootPoints[0][3] = cv::Point(150, 200);

 

Demo源码

void OpenCVManager::testBaseDraw()
{
    cv::Mat mat(400, 400, CV_8UC3, cv::Scalar());
    while(true)
    {
        mat = cv::Scalar();
        cv::imshow("1", mat);
        cv::waitKey(0);
        cv::putText(mat, "Hello world!!!", cv::Point(0, 200), cv::FONT_HERSHEY_COMPLEX,
                    1, cv::Scalar(0, 0, 255));
        cv::imshow("1", mat);
        cv::waitKey(0);
        // line
        cv::line(mat, cv::Point(30, 30) , cv::Point(370, 30) , cv::Scalar(255, 255, 255), 1);
        cv::line(mat, cv::Point(370, 30), cv::Point(370, 370), cv::Scalar(255, 255, 255), 1);
        cv::line(mat, cv::Point(370, 370), cv::Point(30, 370), cv::Scalar(255, 255, 255), 1);
        cv::line(mat, cv::Point(30, 370), cv::Point(30 , 30), cv::Scalar(255, 255, 255), 1);
        cv::imshow("1", mat);
        cv::waitKey(0);
        // ellipse
        cv::ellipse(mat, cv::Point(50+1, 50+1) , cv::Size(10, 20), 45.0, 0.0, 360.0,
                    cv::Scalar(0, 0, 255), 1);
        cv::ellipse(mat, cv::Point(50+1, 350-1), cv::Size(10, 20), 135.0, 0.0, 360.0,
                    cv::Scalar(0, 0, 255), -1);
        cv::ellipse(mat, cv::Point(350-1, 50+1), cv::Size(20, 10), 45.0, 0.0, 360.0,
                    cv::Scalar(0, 0, 255), 1);
        cv::ellipse(mat, cv::Point(350-1, 350-1), cv::Size(20, 10), 135.0, 0.0, 360.0,
                    cv::Scalar(0, 0, 255), -1);
        cv::imshow("1", mat);
        cv::waitKey(0);
        // rectangle
        cv::rectangle(mat, cv::Rect(100   , 100   , 20, 20), cv::Scalar(0, 255, 0));
        cv::rectangle(mat, cv::Rect(100   , 300-20, 20, 20), cv::Scalar(0, 255, 0));
        cv::rectangle(mat, cv::Rect(300-20, 100   , 20, 20), cv::Scalar(0, 255, 0), -1);
        cv::rectangle(mat, cv::Rect(300-20, 300-20, 20, 20), cv::Scalar(0, 255, 0), -1);
        cv::imshow("1", mat);
        cv::waitKey(0);
        // circle
        cv::circle(mat, cv::Point(200, 200), 10, cv::Scalar(200, 200, 200), -1);
        cv::circle(mat, cv::Point(200, 200), 20, cv::Scalar(200, 200, 200), 1);
        cv::circle(mat, cv::Point(200, 200), 30, cv::Scalar(200, 200, 200), 2);
        cv::circle(mat, cv::Point(200, 200), 40, cv::Scalar(200, 200, 200), 3);
        cv::circle(mat, cv::Point(200, 200), 50, cv::Scalar(200, 200, 200), 4);
        cv::imshow("1", mat);
        cv::waitKey(0);
        // fillPoly
        cv::Point rootPoints[1][4];
        rootPoints[0][0] = cv::Point(200, 150);
        rootPoints[0][1] = cv::Point(250, 200);
        rootPoints[0][2] = cv::Point(200, 250);
        rootPoints[0][3] = cv::Point(150, 200);
        const cv::Point * ppt[1] = { rootPoints[0] };
        const int npt[] = {4};
        cv::fillPoly(mat, ppt, npt, 1, cv::Scalar(0, 255, 255));
        cv::imshow("1", mat);
        cv::waitKey(0);
    }
}

 

工程模板:对应版本号v1.4.0

       对应版本号v1.4.0


原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/101026612

发布了227 篇原创文章 · 获赞 237 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/qq21497936/article/details/101026612