OpenCV的绘图函数,实力绘画篮球场

这篇具有很好参考价值的文章主要介绍了OpenCV的绘图函数,实力绘画篮球场。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关键函数:cv2.line(),cv2.circle(),cv2.rectangle(),cv2.ellipse(),cv2.putText() 等。

绘制几何形状

import cv2 as cv
import numpy as np
'''
cv.rectangle(),cv.circle(),cv.line(),cv.putText()   分别是绘制矩形、圆、直线和文字。
cv.rectangle(img, (50, 50), (400, 400), (255, 255, 0), 4)
参数:图像对象,起始点,结束点,颜色,线粗细
cv.circle(img, (200, 200), 100, (255, 0, 0), -1, 8, 0)
参数:图像,圆心,半径,颜色,线粗细
cv.line(img, (100, 100), (400, 400), (0, 255, 0), 8)
参数:图像,起始点,结束点,颜色,线粗细
cv.putText(img, 'OpenCV', org, font, fontScale, color, thickness, cv.LINE_AA)
参数:图像,字符串,位置点,字体,字的大小,颜色,线粗细,cv.LINE_AA

'''
img = np.zeros((800, 800, 3))

temp = np.copy(img)

# 绘制矩形
cv.rectangle(img, (100, 100), (400, 400), (255, 0, 0), 10)
# 绘制圆形
cv.circle(img, (250, 250), 100, (0, 0, 255), -1, 8, 0)
# 绘制直线
cv.line(img, (100, 100), (400, 400), (0, 255, 0), 8)
# 写文字
font = cv.FONT_HERSHEY_SIMPLEX
org = (0, 500)
fontScale = 4
color = (255, 255, 255) #白色  #color = (0, 0, 0)
thickness = 2
img = cv.putText(img, 'OpenCV', org, font, fontScale, color, thickness, cv.LINE_AA)


cv.imshow('123', img)
cv.waitKey(0)

OpenCV的绘图函数,实力绘画篮球场,OpenCV,opencv,人工智能,计算机视觉

绘制OpenCV 的伪图标

import cv2 as cv
import numpy as np
img = np.ones((840, 840, 3), np.uint8) * 0    # img = np.ones((740, 600, 3), np.unit8)*255    unit8 --> uint8

# 第一步 扇形 - 圆:
cv.ellipse(img, (420, 200), (140, 140), 120, 0, 300, (0, 0, 255), -1)
cv.circle(img, (420, 200), 55, (0, 0, 0), -1)  # cv.circle(img, (300, 140), 55, (25, 255, 255), -1)

cv.ellipse(img, (260, 480), (140, 140), 0, 0, 300, (0, 255, 0), -1)
cv.circle(img, (260, 480), 55, (0, 0, 0), -1)

cv.ellipse(img, (580, 480), (140, 140), 240, 0, 300, (255, 0, 0), -1)
cv.circle(img, (580, 480), 55, (0, 0, 0), -1)

# 向图像添加文本
font = cv.FONT_HERSHEY_COMPLEX
# 图像,文字,位置,字体  字体大小 ,颜色  线条 ()
cv.putText(img, 'OpenCV', (100, 780), font, 5, (255, 255, 255), 10, cv.LINE_AA)


cv.namedWindow('image', 0)
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

'''plt.imshow(img)
plt.xticks([]), plt.yticks([])  # 隐藏 x 轴和 y 轴上的刻度值
plt.show()      # 按退出不起作用'''

效果:
OpenCV的绘图函数,实力绘画篮球场,OpenCV,opencv,人工智能,计算机视觉

绘制篮球场

先展示效果
OpenCV的绘图函数,实力绘画篮球场,OpenCV,opencv,人工智能,计算机视觉

代码文章来源地址https://www.toymoban.com/news/detail-705077.html

import cv2
import numpy as np


def DrawBorder(img, length, width, border, color, line_wide=2, line_type=cv2.LINE_AA):
    cv2.rectangle(img, (border, border), (border + length, border + width), color, line_wide, line_type)


def DrawMidline(img, length, width, border, radius, color, line_wide=2, line_type=cv2.LINE_AA):
    cv2.line(img, (border + length // 2, border), (border + length // 2, border + width), color, line_wide, line_type)
    cv2.circle(img, (border + length // 2, border + width // 2), radius, color, line_wide, line_type)


def DrawThreepointline(img, length, width, border, border_3pl, radius, color, line_wide=2, line_type=cv2.LINE_AA):
    '''
    border_3pl: 三分线半圆圆心与边线距离
    radius: 三分线半圆半径
    '''
    cv2.ellipse(img, (border + border_3pl, border + width // 2), (radius, radius), 0, -90, 90, color, line_wide,
                line_type)
    cv2.line(img, (border, border + width // 2 - radius), (border + border_3pl, border + width // 2 - radius), color,
             line_wide, line_type)
    cv2.line(img, (border, border + width // 2 + radius), (border + border_3pl, border + width // 2 + radius), color,
             line_wide, line_type)

    cv2.ellipse(img, (border + length - border_3pl, border + width // 2), (radius, radius), 180, -90, 90, color,
                line_wide, line_type)
    cv2.line(img, (border + length - border_3pl, border + width // 2 - radius),
             (border + length, border + width // 2 - radius), color, line_wide, line_type)
    cv2.line(img, (border + length - border_3pl, border + width // 2 + radius),
             (border + length, border + width // 2 + radius), color, line_wide, line_type)


def Draw3szone(img, length, width, border, z_length, z_width, radius, color, zone_type=1, line_wide=2,
               line_type=cv2.LINE_AA):
    '''
    zone_type: 1矩形、2梯形
    '''
    if zone_type == 1:
        cv2.rectangle(img, (border, border + width // 2 - z_width // 2),
                      (border + z_length, border + width // 2 + z_width // 2), color, line_wide, line_type)
        cv2.ellipse(img, (border + z_length, border + width // 2), (radius, radius), 0, -90, 90, color, line_wide,
                    line_type)

        cv2.rectangle(img, (border + length - z_length, border + width // 2 - z_width // 2),
                      (border + length, border + width // 2 + z_width // 2), color, line_wide, line_type)
        cv2.ellipse(img, (border + length - z_length, border + width // 2), (radius, radius), 180, -90, 90, color,
                    line_wide, line_type)
    elif zone_type == 2:
        rect = np.array([[[border, border + width // 2 - z_width // 2],
                          [border + z_length, border + width // 2 - radius],
                          [border + z_length, border + width // 2 + radius],
                          [border, border + width // 2 + z_width // 2]]], np.int32)
        cv2.polylines(img, rect, False, color, line_wide, line_type)
        cv2.circle(img, (border + z_length, border + width // 2), radius, color, line_wide, line_type)

        rect = np.array([[[border + length, border + width // 2 - z_width // 2],
                          [border + length - z_length, border + width // 2 - radius],
                          [border + length - z_length, border + width // 2 + radius],
                          [border + length, border + width // 2 + z_width // 2]]], np.int32)
        cv2.polylines(img, rect, False, color, line_wide, line_type)
        cv2.circle(img, (border + length - z_length, border + width // 2), radius, color, line_wide, line_type)


white = (255, 255, 255)
black = (0, 0, 0)
blue = (255, 0, 0)
green = (0, 255, 0)
red = (0, 0, 255)

scale = 100
line_color = white
background_color = black

# 球场各参数
border = int(2 * scale)  # 边界
length = int(28 * scale)  # 场地长
width = int(15 * scale)  # 场地宽
radius = int(1.8 * scale)  # 圆圈半径
# 三分线
radius_3pl = int(6.75 * scale)  # 三分线圆圈半径
border_3pl = int(1.57 * scale)  # 三分线圆心与边界距离
# 三秒区
type_3szone = 1  # 三秒区类型, 1为矩形, 2为梯形
length_3szone = int(5.8 * scale)  # 矩形/梯形长
width_3szone = int(4.9 * scale)  # 矩形/梯形宽

img = (background_color * np.ones((width + border * 2, length + border * 2, 3))).astype(np.uint8)

DrawBorder(img, length, width, border, line_color)
DrawMidline(img, length, width, border, radius, line_color)
DrawThreepointline(img, length, width, border, border_3pl, radius_3pl, line_color)
Draw3szone(img, length, width, border, length_3szone, width_3szone, radius, line_color, type_3szone)

# 显示
cv2.namedWindow('test', 0)
cv2.resizeWindow('test', int(28 * 40 + 2 * 40), int(15 * 40 + 2 * 40))
cv2.imshow('test', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 存储
# cv2.imwrite("basketball_court_01.jpg", img)

到了这里,关于OpenCV的绘图函数,实力绘画篮球场的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV 鼠标绘图

    1、实验目标 (1)、鼠标当笔 (2)、函数:setMouseCallback() (3)、滑动调色板 (4)、函数cv.createTrackbar(),cv.getTrackbarPos() 2、实验步骤 (1)、安装必要的库 (2)、查看支持鼠标的操作 (3)、双击鼠标画出一个圆 cv2.setMouseCallback (winname, onMouse, userdata=0) winname: 自定义的窗口名 onMouse:鼠标事件的

    2024年02月09日
    浏览(35)
  • OpenCV 4.9基本绘图

    返回: OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV使用通用内部函数对代码进行矢量化 下一篇:使用OpenCV4.9的随机生成器和文本 ​ 目标 在本教程中,您将学习如何: 使用 OpenCV 函数  line()  画 一条线 使用 OpenCV 函数  ellipse() 绘制 椭圆 使用 OpenCV 函数  rectangle()

    2024年04月27日
    浏览(25)
  • QT--Opencv绘图

    提示:本文为学习内容,若有错误,请联系作者,谦虚受教。 只要来日可期,今天就值得欣喜。 img:您要绘制形状的图像 color:形状的颜色。对于BGR,将其作为元组传递,例如:(255,0,0)对于蓝色。对于灰度, 只需传递标量值即可。 厚度:线或圆等的粗细。如果对闭合图形(

    2024年02月13日
    浏览(41)
  • Opencv中的RNG-随机绘图

    在OpenCV中, RNG 是一个 随机数生成器类 ,用于生成各种类型的随机数,包括均匀分布或高斯分布的整数和浮点数。RNG类的实例化时可以接受一个无符号整数作为 种子值 ,这个种子值决定了随机数生成序列的起点,相同的种子值将产生相同的随机数序列。这 在需要可重复的实

    2024年02月21日
    浏览(40)
  • ros中调用opencv绘图测试

    2024年01月25日
    浏览(26)
  • 【跟官网学opencv-python】笔记1.3:opencv鼠标绘图 cv2.setMouseCallback()

    目录 前言 目标 函数详解 1、cv2.setMouseCallback()鼠标回调函数 2、鼠标事件简介 代码演示 ​编辑 应用演示 运行效果 参考 跟着官网学习才是基础入门的最佳选择,下文是opencv-python官网的学习记录及扩展! 学习函数cv2.setMouseCallback()并使用鼠标绘制不同图形(矩形、多边形等)

    2024年02月03日
    浏览(81)
  • opencv项目6----AI绘画(隔空绘画)

    想不想实现不触碰电脑屏幕,只是在空中拿着彩笔绘画,就可以把对应的颜色画到屏幕中去? 今天这个项目就可以帮助你实现该功能,只需要你会使用python,且有opencv和图像处理的基础知识就可以实现该项目了。 下面跟着我一起操作吧! 1.先熟悉什么是hsv图像: ①在 HSV 色

    2024年02月10日
    浏览(49)
  • 【C++的OpenCV】第十五课-OpenCV的绘图工具(rectangle、circle、line、polylines、putText)常用方法简介

    🎉🎉🎉 欢迎各位来到小白 p i a o 的学习空间! color{red}{欢迎各位来到小白piao的学习空间!} 欢迎各位来到小白 p ia o 的学习空间! 🎉🎉🎉 💖 C++Python所有的入门技术皆在 我的主页 color{#0cc123}{我的主页} 我的主页 :我的主页 1.1.1 利用构造函数Mat中的一些形式完成快速创

    2024年02月06日
    浏览(36)
  • OpenCV学习(三)——响应鼠标事件(获取点击点坐标和颜色,利用鼠标进行绘图)

    使用OpenCV读取图像,可以在读取图像的窗口通过鼠标点击可以实现:获取鼠标点击像素点的坐标、获取鼠标点击像素点的颜色和在鼠标点击的像素点生成圆等等。 winname:窗口的名字 callback:回调函数 userdata:给回调函数的参数 enent:鼠标事件 x:横坐标 y:纵坐标 flags:事件

    2024年02月08日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包