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

若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/101026612
各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...(点击传送门)

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

 

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

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

 

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

你可能感兴趣的:(#,OpenCV,图形图像处理)