OpenCV绘制几何图形

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

Mat bgImage;
const char* path = "C:/Users/Administrator/Desktop/1.jpg";
const char* window_name = "load image";

void MyLines();
void MyRectangle();
void MyEllipse();
void MyCircle();
void MyPolygon();
void RandomLine();

int main(int argc, char** argv)
{
    bgImage = imread(path);
    if (bgImage.empty())
    {
        cout << "could not load.." << endl;
        return -1;
    }

    /*MyLines();
    MyRectangle();
    MyEllipse();
    MyCircle();
    MyPolygon();

    putText(bgImage, "Hello OpenCV", Point(100, 300), CV_FONT_HERSHEY_COMPLEX, 1.0, Scalar(255, 0, 0), 2, 8);*/
    //imshow(window_name, bgImage);
    RandomLine();
    waitKey(0);
    return 0;
}

//画线
void MyLines()
{
    Point p1 = Point(20, 30);
    Point p2;
    p2.x = 300;
    p2.y = 300;
    Scalar color = Scalar(0, 0, 255);
    line(bgImage, p1, p2, color, 2, LINE_8);
}

//画矩形
void MyRectangle()
{
    Rect rect = Rect(200, 100, 200, 200);
    Scalar color = Scalar(255, 0, 255);
    rectangle(bgImage, rect, color, 2, LINE_8);
}

//画椭圆
void MyEllipse()
{
    Scalar color = Scalar(0, 255, 0);
    //ellipse(背景图,中心,长轴短轴,倾斜程度,弧范围,颜色,线)
    ellipse(bgImage, Point(bgImage.cols / 2, bgImage.rows / 2), Size(bgImage.cols / 4, bgImage.rows / 8), 90, 0, 360, color, 2, LINE_8);
}

//画圆
void MyCircle()
{
    Scalar color = Scalar(0, 255, 255);
    Point center = Point(bgImage.cols / 2, bgImage.rows / 2);
    circle(bgImage, center, 150, color, 2, LINE_8);
}

//填充
void MyPolygon()
{
    Point pts[1][5];
    pts[0][0] = Point(100, 100);
    pts[0][1] = Point(100, 200);
    pts[0][2] = Point(200, 200);
    pts[0][3] = Point(200, 100);
    pts[0][4] = Point(100, 100);

    const Point* ppts[] = { pts[0] };
    int npt[] = { 5 };
    Scalar color = Scalar(255, 12, 255);

    fillPoly(bgImage, ppts, npt, 1, color, 8);
}

//生成随机数
void RandomLine()
{
    RNG rng(12345);
    Point pt1;
    Point pt2;
    Mat bg = Mat::zeros(bgImage.size(), bgImage.type());
    for (int i = 0; i < 1000; i++)
    {
        pt1.x = rng.uniform(0, bgImage.cols);
        pt2.x = rng.uniform(0, bgImage.cols);
        pt1.y = rng.uniform(0, bgImage.rows);
        pt2.y = rng.uniform(0, bgImage.rows);
        Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
        if (waitKey(50) > 0)
        {
            break;
        }
        line(bg, pt1, pt2, color, 1, 8);
        imshow("random line", bg);
    }
}


### 使用 OpenCV 绘制几何图形 #### 点和颜色标量的表示 在OpenCV中,点通常由`cv::Point`类定义,它接受两个整数参数来指定二维空间中的坐标。颜色则通过`cv::Scalar`对象表示,在BGR色彩模式下传递三个浮点数值分别对应蓝色、绿色和红色通道[^1]。 #### 绘制不同类型的几何形状 ##### 圆形绘制 为了创建一个圆形,可调用`cv::circle()`方法,并提供必要的参数如中心位置、半径大小还有线条样式等信息。下面给出了一段C++代码片段用来展示怎样在一个白色背景下出红色实心圆的例子: ```cpp #include <opencv2/opencv.hpp> int main() { // 创建一个空白图像 cv::Mat image(400, 600, CV_8UC3, cv::Scalar(255, 255, 255)); // 定义圆心坐标 cv::Point center(300, 200); // 定义圆的半径 int radius = 50; // 指定圆的颜色(BGR格式) cv::Scalar color(0, 0, 255); // 设置线宽 int thickness = -1; // 实心填充 // 在图像上绘制cv::circle(image, center, radius, color, thickness); // 显示图像窗口并等待按键 cv::imshow("Circle Drawing", image); cv::waitKey(0); return 0; } ``` 这段程序不仅展示了如何构建基本的绘图环境,还说明了利用特定属性定制化所要呈现的效果[^3]。 ##### 直线绘制 对于想要连接两点之间的操作,则应该考虑采用`cv::line()`函数完成此任务。其接收源图片作为输入数组的同时还需要知道起点(`pt1`)与终点(`pt2`)的确切方位以及其它一些辅助选项比如粗细程度或是端点形式等等[^4]。 ```cpp // 假设已经有了之前创建好的image变量... cv::Point start_point(50, 50), end_point(250, 350); // 调用line函数绘制一条从start_point到end_point的蓝线 cv::line(image, start_point, end_point, cv::Scalar(255, 0, 0), 3); ``` 上述实例简单明了地解释了直线绘制的过程及其配置方式。 #### Python版本实现 除了C++之外,Python也是广泛应用于计算机视觉领域的一种编程语言。这里也提供了相应的Python版示例供参考: ```python import cv2 import numpy as np # 初始化一张全白底色的布 canvas = np.ones((400, 600, 3), dtype=np.uint8) * 255 # 设定点的位置和其他特性 center_coordinates = (300, 200) radius = 50 color_blue = (255, 0, 0) # 应用circle函数添加圆形至面当中 cv2.circle(canvas, center_coordinates, radius, color_blue, -1) # 同样地,我们可以轻松地加入更多元素,例如直线上面提到的那个例子 start_point_py = (50, 50) end_point_py = (250, 350) thickness_line = 3 cv2.line(canvas, start_point_py, end_point_py, (0, 0, 255), thickness_line) # 展现最终成果给用户查看 cv2.imshow('Geometric Shapes', canvas) cv2.waitKey(0) cv2.destroyAllWindows() ``` 本部分介绍了两种主要的语言环境下运用OpenCV库来进行简单的图形创作实践,希望能够帮助理解这些概念和技术细节[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值