python学opencv|读取图像(二十)使用cv2.circle()绘制圆形

【1】引言

前序学习进程中,已经对如何绘制线段和矩形有一定的掌握,相关文章链接为:

python学opencv|读取图像(十八)使用cv2.line创造线段-CSDN博客

python学opencv|读取图像(十九)使用cv2.rectangle()绘制矩形-CSDN博客

现在,我们会很自然想到继续绘制圆形,这就是本次学习的目标。

【2】官网教程

点击下述链接,直达官网:

OpenCV: cv::gapi::wip::draw::Circle Struct Reference

在官网,会看到如下介绍:

图1

这里的几个参数意义为:

GAPI_WRAP cv::gapi::wip::draw::Circle::Circle     (     const cv::Point &     center_,  #圆心坐标
        int     radius_, #半径
        const cv::Scalar &     color_, #颜色数列
        int     thick_ = 1, #圆弧宽度
        int     lt_ = 8, #圆弧线存储类型
        int     shift_ = 0 ) #圆心坐标和弧长对应数据的小数位数,暂无需关注

【3】代码测试

从这里,我们开始测试代码。

代码可以在绘制矩形的基础上稍作修改,这里先给出完整段落:

import numpy as np  # 引入numpy模块
import cv2 as cv  # 引入cv模块

canvas = np.ones((580, 580, 3), np.uint8)*158  # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
for i in range(0, 580, 1):
    for j in range(0, 580, 1):
        canvas[i, j, 0] = 255  # 第一个通道值

# 第二个通道值
#for i in range(0, 580, 1):
    #for j in range(0, 580, 1):
        #canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值

# 第三个通道值
#for i in range(0, 580, 1):
    #for j in range(0, 580, 1):
        #canvas[i, j, 2] = 255 * np.tanh(i + j) +255 * np.tanh(i - j) # 第三个通道值
canvas=cv.circle(canvas,(285,285),80,(0,0,255),3) #第一个圆形
canvas=cv.circle(canvas,(100,285),80,(0,255,255),-1) #第二个圆形
canvas=cv.circle(canvas,(470,285),80,(255,0,0),-1) #第三个圆形
#canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5)  # 矩形
#canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10)  # 矩形
#canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1)  # 矩形
#canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15)  # 线段
#canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20)  # 线段

cv.imshow('rectangle', canvas)  # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas)  # 保存图像
cv.waitKey()  # 图像不会自动关闭
cv.destroyAllWindows()  # 释放所有窗口

 运行代码后的效果为:

图2

这里的核心3行代码的意义是:

canvas=cv.circle(canvas,(285,285),80,(0,0,255),3) #第一个圆形的圆心为(285,285),半径为80,圆弧的颜色为(0,0,255),圆弧宽度为3;

canvas=cv.circle(canvas,(100,285),80,(0,255,255),-1) #第二个圆形的圆心为(100,285),半径为80,圆弧的颜色为(0,255,255),实心圆;

canvas=cv.circle(canvas,(470,285),80,(255,0,0),-1) #第三个圆形的圆心为(470,285),半径为80,圆弧的颜色为(255,0,0),实心圆。

【4】代码修改

同样的,假如想把背景画布变成渐变颜色,可以继续增添一些代码:

# 第一个通道值
for i in range(0, 580, 1):
    for j in range(0, 580, 1):
        canvas[i, j, 0] = 0.2*(i+j)  # 第一个通道值

# 第二个通道值
for i in range(0, 580, 1):
    for j in range(0, 580, 1):
        canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值

# 第三个通道值
for i in range(0, 580, 1):
    for j in range(0, 580, 1):
        canvas[i, j, 2] = 100 * np.tanh(i+j ) +100 * np.tanh(i-j)+50 * np.cos(j - i) # 第三个通道值

运行后的图像为:

图3

此时的完整代码为:

import numpy as np  # 引入numpy模块
import cv2 as cv  # 引入cv模块

canvas = np.ones((580, 580, 3), np.uint8)*158  # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
for i in range(0, 580, 1):
    for j in range(0, 580, 1):
        canvas[i, j, 0] = 0.2*(i+j)  # 第一个通道值

# 第二个通道值
for i in range(0, 580, 1):
    for j in range(0, 580, 1):
        canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值

# 第三个通道值
for i in range(0, 580, 1):
    for j in range(0, 580, 1):
        canvas[i, j, 2] = 100 * np.tanh(i+j ) +100 * np.tanh(i-j)+50 * np.cos(j - i) # 第三个通道值
canvas=cv.circle(canvas,(285,285),80,(0,0,255),3) #第一个圆形
canvas=cv.circle(canvas,(100,285),80,(0,255,255),-1) #第二个圆形
canvas=cv.circle(canvas,(470,285),80,(255,0,0),-1) #第三个圆形
#canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5)  # 矩形
#canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10)  # 矩形
#canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1)  # 矩形
#canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15)  # 线段
#canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20)  # 线段

cv.imshow('rectangle', canvas)  # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas)  # 保存图像
cv.waitKey()  # 图像不会自动关闭
cv.destroyAllWindows()  # 释放所有窗口

【5】总结

掌握了使用cv2.circle()函数绘制圆形的基本技巧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值