小言_互联网的博客

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

403人阅读  评论(0)

若该文为原创文章,未经允许不得转载
原博主博客地址: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基础图形绘制,可用于做图形标记。

 

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


转载:https://blog.csdn.net/qq21497936/article/details/101026612
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场