笔记:OpenCV4.5.4 【c++】绘制形状与文字

目录

使用cv::Point与cv::Scalar

画直线   cv::line          

画矩形cv::rectangle

画圆cv::circle

画椭圆cv::ellipse

填充多边形cv::fillPoly

 画文字 cv::putText

随机数生成cv::RNG


使用cv::Point与cv::Scalar

Point表示2D平面上一个点x,y     Point p;     p.x = 10;     p.y = 8;      or     p = Pont(10,8);

Point2f  or Point2d 为浮点数类型

Point3表示3D平面上一个点x,y,z     Point3 p=(1,2,3)    x,y,z都为整数类型

 Point3f p=(1.1,1.2,1.3) 为浮点数类型

Scalar表示四个元素的向量     Scalar(a, b, c);

// a = blue, b = green, c = red表示RGB三个通道 

画直线   cv::line          

#include <iostream>
#include <cstring>
#include <opencv2/highgui/highgui.hpp>
#include<cmath>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;

//画直线
void MyLine(Mat bgImage)
{
    Point p1 = Point(20, 30);
    Point p2;
    p2.x = 300;
    p2.y = 300;
    Scalar color = Scalar(0, 0, 255);
                              //线的粗细程度    线的类型 8 4 还有反锯齿AA
    line(bgImage, p1, p2, color, 1, LINE_8);
    //LINE_4就是像素有4个方向可以移动(上下左右)
    //LINE_8则有8个可移动的方向 上下左右 上左 上右 下左 下右
    //LINE_AA方向则更多
}
int main() 
{
    Mat src = imread("D:/opencv/2/a.jpg");
    if (src.empty()) 
    {
        printf("could not load image...\n");
        return -1;
    }
    namedWindow("input", WINDOW_AUTOSIZE);
    imshow("input", src);

     MyLine(src);
     namedWindow("output", WINDOW_AUTOSIZE);
     imshow("output", src);
     waitKey();

    return 0;
}                   

画矩形cv::rectangle

void MyRectangle(Mat bgImage)
{
    Rect rect1 = Rect(50, 10, 300, 300);//定义矩形对象,左上角坐标为(50.10)宽为300,高为300

    Scalar color = Scalar(255, 0, 0);//定义颜色

    rectangle(bgImage, rect1, color, 2, LINE_AA);
    //    矩形所在图像  矩形的一个顶点 矩形对角线上的另一个顶点 颜色 线条粗细(取负值时,颜色填充矩形) 线条类型
    //rectangle(bgImage, Point(50,10), Point(350, 310), Scalar(255,0,0), -1, LINE_AA);

}

画圆cv::circle

void MyCircle(Mat bgImage) 
{
    Scalar color = Scalar(255, 255, 0);
    Point center = Point(bgImage.cols / 2, bgImage.rows / 2);//圆心
    //输入的图像 圆的中心,圆的半径,圆的颜色,线的粗细,线的类型
    circle(bgImage, center, 100, color, 2, 8);
}

画椭圆cv::ellipse

void MyEllipse(Mat bgImage)
{
    Scalar color = Scalar(0, 255, 0);
    //输入的图像,圆心坐标(x,y),                                                                轴的长度,圆弧起始角的角度,圆弧终结角的角度,颜色,线的类型
    ellipse(bgImage, Point(bgImage.cols / 2, bgImage.rows / 2), Point(bgImage.cols / 4, bgImage.rows / 8), 45, 0, 360, color, LINE_4);
}

填充多边形cv::fillPoly

void MyPolygon(Mat bgImage) 
{
    //矩形的点
    Point pts[1][5];
    pts[0][0] = Point(50, 50);
    pts[0][1] = Point(50, 100);
    pts[0][2] = Point(100, 100);
    pts[0][3] = Point(100, 50);
    pts[0][4] = Point(50, 50);//返回到初始点

    const Point* ppts[] = { pts[0] };
    int npt[] = { 5 };//点的数量
    Scalar color = Scalar(0, 255, 255);
    //所在图像 图形的点,点的数量,画几个多边形,颜色,线段的类型
    fillPoly(bgImage, ppts, npt, 1, color, 8);

}

 画文字 cv::putText

  //写文字
  // 待绘制的图形,待绘制的文字,文本框的左下角,字体,字的大小,颜色,线条宽度,线型
  putText(src,"hello world",Point(100,50),FONT_HERSHEY_COMPLEX,1.5,Scalar(255,0,255),1,8);

随机数生成cv::RNG

生成高斯随机数gaussian (double sigma)

生成正态分布随机数uniform (int a, int b) 

#include <iostream>
#include <cstring>
#include <opencv2/highgui/highgui.hpp>
#include<cmath>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;

void RandLineDemo(Mat bgImage)
{
    RNG rng(12345);//随机数
    Point pt1, pt2;
    for (int i = 0; i < 200; i++)
    {
        pt1.x = rng.uniform(0, bgImage.cols);
        pt1.y = rng.uniform(0, bgImage.rows);
        pt2.x = rng.uniform(0, bgImage.cols);
        pt2.y = rng.uniform(0, bgImage.rows);

        Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
        line(bgImage, pt1, pt2, color, 1, LINE_8);
        imshow("output", bgImage);
        if (waitKey(50) > 0)
        {
            break;
        }

    }
}
int main() 
{
    Mat bg = Mat::zeros(1024, 2048, 16);
    RandLineDemo(bg);
    namedWindow("output", WINDOW_AUTOSIZE);
    imshow("output", bg);

    waitKey();
    return 0;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,cv2.error是OpenCV库中的一个错误类。具体地说,它是用于表示在使用OpenCV库中的函数时发生的错误的异常类。 在异常信息中,"opencv(4.5.4)"表示OpenCV库的版本号为4.5.4。这个信息有助于开发者定位问题,因为不同版本的OpenCV可能会有不同的功能和行为。 当我们遇到这个错误时,我们可以根据错误信息进一步定位问题。通常,这种错误可能是由传递给OpenCV函数的参数或数据引起的。我们可以检查参数的类型、大小、范围,确保它们符合函数的要求。 另外,我们还可以查阅OpenCV的官方文档来了解特定函数的使用方法和限制。这可以帮助我们避免一些常见的错误。 如果问题仍然存在,我们可以尝试以下几种解决方案: 1. 更新OpenCV版本:由于不同版本的OpenCV可能会修复一些bug或添加新的功能,更新到最新版本可能有助于解决问题。 2. 检查依赖项:某些OpenCV函数可能依赖于其他库或软件包。我们可以确保所有依赖项都已经正确安装并配置。 3. 检查编译选项:如果我们自己编译了OpenCV库,我们可以检查编译选项是否正确设置,比如支持所需的功能和硬件加速。 4. 搜索错误信息:我们可以在互联网上搜索关于这个错误的更多信息,可能会有其他开发者已经遇到并解决了类似的问题。 总之,当我们遇到cv2.error: opencv(4.5.4)错误时,我们应该仔细检查并理解错误消息,然后采取相应的步骤来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值