OpenCV入门4——实现图形的绘制

文章目录

  • OpenCV绘制直线
  • OpenCV绘制矩形和圆
    • 画矩形
    • 画圆
  • OpenCV椭圆的绘制
  • OpenCV绘制多边形
  • OpenCV绘制文本
  • 实现鼠标绘制基本图形

在这里插入图片描述
在这里插入图片描述

OpenCV绘制直线

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)
# 坐标点为(x, y)
cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)cv2.imshow('draw', img)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

OpenCV绘制矩形和圆

详情参看官方文档

画矩形

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)cv2.imshow('draw', img)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)cv2.imshow('draw', img)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

画圆

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)# 画圆
cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)cv2.imshow('draw', img)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

OpenCV椭圆的绘制

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
cv2.circle(img, (320, 240), 100, (0, 255, 0))
cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
cv2.ellipse(img, (320, 240), (100, 50), 0, 0, 360, (0, 255, 0))cv2.imshow('draw', img)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
cv2.circle(img, (320, 240), 100, (0, 255, 0))
cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
cv2.ellipse(img, (320, 240), (100, 50), 90, 45, 90, (0, 255, 0), -1)cv2.imshow('draw', img)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
cv2.circle(img, (320, 240), 100, (0, 255, 0))
cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
cv2.ellipse(img, (320, 240), (100, 50), 15, 0, 360, (0, 255, 0))cv2.imshow('draw', img)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

OpenCV绘制多边形

在这里插入图片描述
点集必须为32位
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
# cv2.circle(img, (320, 240), 100, (0, 255, 0))
# cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
# cv2.ellipse(img, (320, 240), (100, 50), 15, 0, 360, (0, 255, 0))# 画多边形
pts = np.array([(300, 10), (150, 100), (450, 100)], np.int32)
cv2.polylines(img, [pts], True, (0, 255, 0))cv2.imshow('draw', img)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
# cv2.circle(img, (320, 240), 100, (0, 255, 0))
# cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
# cv2.ellipse(img, (320, 240), (100, 50), 15, 0, 360, (0, 255, 0))# 画多边形
pts = np.array([(300, 10), (150, 100), (450, 100)], np.int32)
cv2.polylines(img, [pts], True, (0, 255, 0))# 填充多边形
cv2.fillPoly(img, [pts], (255, 255, 0))cv2.imshow('draw', img)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

OpenCV绘制文本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = np.zeros((480, 640, 3), np.uint8)# 画线
# 坐标点为(x, y)
# cv2.line(img, (0, 0), (300, 400), (0, 255, 0), 1, 4)
# cv2.line(img, (100, 0), (400, 600), (255, 0, 0), 5, 16)# 画矩形
# (10, 10)represents the top left corner of rectangle 
# (100, 100) represents the bottom right corner of rectangle 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 5)
# Thickness of -1 will fill the entire shape 
# cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), -1)# 画圆
# cv2.circle(img, (320, 240), 30, (0, 255, 0), -1)
# cv2.circle(img, (320, 240), 100, (0, 255, 0))
# cv2.circle(img, (320, 240), 5, (255, 0, 0), -1)# 画椭圆
# 长方形的度若为0则是从右侧x正轴开始的,顺时针旋转
# cv2.ellipse(img, (320, 240), (100, 50), 15, 0, 360, (0, 255, 0))# 画多边形
# pts = np.array([(300, 10), (150, 100), (450, 100)], np.int32)
# cv2.polylines(img, [pts], True, (0, 255, 0))# 填充多边形
# cv2.fillPoly(img, [pts], (255, 255, 0))# 绘制文本
cv2.putText(img, "ILoveFS", (10, 400), cv2.FONT_HERSHEY_DUPLEX, 3, (0, 255, 0))cv2.imshow('draw', img)key = cv2.waitKey(0)
if key & 0xff == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

实现鼠标绘制基本图形

# -*- coding: utf-8 -*-
import cv2
import numpy as np# 基本功能:
# 可以通过鼠标进行基本图形的绘制
# 1. 可以画线: 当用户按下l键, 即选择了画线。 此时, 滑动鼠标即可画线。
# 2. 可以画矩形: 当用户按下r键, 即可选择画矩形。 此时, 滑动鼠标即可画矩形。
# 3. 可以画圆: 当用户按下c键,即可选择画圆。 此时, 滑动鼠标即可画圆。# curshape: 0-drawline, 1-drawrectangle, 2-drawcircle# 显示窗口和背景
img = np.zeros((480, 640, 3), np.uint8)curshape = 0
startpos = (0, 0)# 创建窗口
cv2.namedWindow('mouse', cv2.WINDOW_NORMAL)# 鼠标回调函数
def mouse_callback(event, x, y, flags, userdata):global startpos, curshape# print(event, x, y, flags, userdata)if(event & cv2.EVENT_LBUTTONDOWN == cv2.EVENT_LBUTTONDOWN):startpos = (x, y)elif(event & cv2.EVENT_LBUTTONUP == cv2.EVENT_LBUTTONUP):if curshape == 0:cv2.line(img, startpos, (x, y), (0, 255, 0))elif curshape == 1:cv2.rectangle(img, startpos, (x, y), (0, 255, 0))elif curshape == 2:a = (x - startpos[0])b = (y - startpos[1])r = int((a ** 2 + b ** 2) ** 0.5)cv2.circle(img, startpos, r, (0, 0, 255))else:print('error: no shape')# 设置鼠标回调
cv2.setMouseCallback('mouse', mouse_callback, "666")while True:cv2.imshow('mouse', img)key = cv2.waitKey(0) & 0xffif key == ord('q'):breakelif key == ord('l'):curshape = 0elif key == ord('r'):curshape = 1elif key == ord('c'):curshape = 2cv2.destroyAllWindows()

在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/193769.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《视觉SLAM十四讲》-- 后端 1(下)

8.2 BA 与图优化 Bundle Adjustment 是指从视觉图像中提炼出最优的 3D 模型和相机参数(内参和外参)。 8.2.1 相机模型和 BA 代价函数 我们从一个世界坐标系中的点 p \boldsymbol{p} p 出发,把相机的内外参数和畸变都考虑进来,…

C语言从入门到精通之【char类型】

char类型用于储存字符(如,字母或标点符号),但是从技术层面看,char是整数类型。因为char类型实际上储存的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。 char类型占1个字…

wx.canvasToTempFilePath生成图片保存到相册

微信小程序保存当前画布指定区域的内容导出生成指定大小的图片&#xff0c;记录一下 api&#xff1a;wx.canvasToTempFilePath 效果&#xff1a; 代码&#xff1a;wxml <canvas style"width: {{screenWidth}}px; height: {{canvasHeight}}px;" canvas-id"my…

NewStarCTF2023 Week3 Reverse方向 题目STL WP

分析 代码不多&#xff0c;逻辑挺清楚的。 先用Z3解出V7&#xff1a; from z3 import *s Solver() v1, v2, v3, v4, v5, v6 BitVecs(v1 v2 v3 v4 v5 v6, 32) v7, v8, v9, v10, v11 BitVecs(v7 v8 v9 v10 v11, 32)s.add((v1 << 15) ^ v1 0x2882D802120E) s.add((v2 …

借助拧紧曲线高效管理螺栓装配防错——SunTorque智能扭矩系统

拧紧曲线作为拧紧质量的“晴雨表”&#xff0c;在拧紧过程中&#xff0c;能够实时探知到拧紧状态是否存在异常&#xff0c;并根据曲线特质推测出拧紧过程中遇到了什么样的问题&#xff0c;今天SunTorque智能扭矩系统带您了解拧紧曲线在螺栓装配防错管理中如何发挥作用。 合格的…

搭建知识付费系统的最佳实践是什么

在数字化时代&#xff0c;搭建一个高效且用户友好的知识付费系统是许多创业者和内容创作者追求的目标。本文将介绍一些搭建知识付费系统的最佳实践&#xff0c;同时提供一些基本的技术代码示例&#xff0c;以帮助你快速入门。 1. 选择合适的技术栈&#xff1a; 搭建知识付费…

论文阅读:YOLOV: Making Still Image Object Detectors Great at Video Object Detection

发表时间&#xff1a;2023年3月5日 论文地址&#xff1a;https://arxiv.org/abs/2208.09686 项目地址&#xff1a;https://github.com/YuHengsss/YOLOV 视频物体检测&#xff08;VID&#xff09;具有挑战性&#xff0c;因为物体外观的高度变化以及一些帧的不同恶化。有利的信息…

GitHub Universe 2023:AI 技术引领软件开发创新浪潮

GitHub 是全球领先的软件开发和协作平台&#xff0c;数百万开发者和企业在此分享、学习和创建卓越的软件。同时 GitHub 处在 AI 技术前沿&#xff0c;通过其先进的 AI 技术增强开发者体验并赋能未来软件开发的使命。在今天的文章中&#xff0c;我们将一起看看在 GitHub 年度大会…

Python---数据序列类型之间的相互转换

list()方法&#xff1a;把某个序列类型的数据转化为列表 # 1、定义元组类型的序列 tuple1 (10, 20, 30) print(list(tuple1))# 2、定义一个集合类型的序列 set1 {a, b, c, d} print(list(set1))# 3、定义一个字典 dict1 {name:刘备, age:18, address:蜀中} print(list(dict1…

沉浸式航天vr科普馆VR太空主题馆展示

科普教育从小做起&#xff0c;现在我们的很多地方小孩子游乐体验不单单只有草坪玩耍体验&#xff0c;还有很多科普知识的体验馆和游玩馆。虽然现在我们还不能真实的上太空或者潜入海底&#xff0c;但是这些现在已经可以逼真的展示在我们面前。通过一种虚拟现实技术手段。人们带…

PON网络是什么

上节介绍到PON网络概念&#xff0c;PON网络具备节省局端光缆资源、避免故障点的同时&#xff0c;还具备拥有更远的传输距离、更高的带宽以及分光特性&#xff08;P2MP&#xff09;的优势。 PON&#xff08;无源光纤网络&#xff0c;Passive Optical Network&#xff09;网络&am…

基于单片机的智能家居安保系统(论文+源码)

1.系统设计 本次基于单片机的智能家居安保系统设计&#xff0c;在功能上如下&#xff1a; 1&#xff09;以51单片机为系统控制核心&#xff1b; 2&#xff09;温度传感器、人体红外静释电、烟雾传感器来实现检测目的&#xff1b; 3&#xff09;以GSM模块辅以按键来实现远/近程…

【阿里云】函数计算 X 通义千问快速部署

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

从能用到好用,国产CPU不是你想象中的样子了?

最近看到了挺多关于国产CPU的评测视频&#xff0c;主要测试了鲲鹏、飞腾、海光、龙芯这四家。作为信创从业者&#xff0c;也想结合日常工作中接触到的国产CPU使用体验&#xff0c;发表些自己的看法。 我看到的评测&#xff0c;主要是采用SPEC CPU2006进行横向对比。SPEC CPU20…

掌握这个技巧,你也能成为资产管理高手!

资产管理是企业管理中至关重要的一环&#xff0c;涉及到对公司财务、物资和信息等各个方面的有效监控和管理。 随着企业规模的扩大和业务复杂性的增加&#xff0c;采用先进的资产管理系统成为确保企业高效运营的必要条件之一。 客户案例 医疗机构 温州某医疗机构拥有大量的医…

电子学会C/C++编程等级考试2021年03月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:药房管理 随着信息技术的蓬勃发展,医疗信息化已经成为医院建设中必不可少的一部分。计算机可以很好地辅助医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将更多精力投入真正的医…

docker安装MongoDB数据库,并且进行密码配置

很美的一首小诗> 我在外面流浪&#xff0c;回来时 故乡瘦了一圈—— 墩子叔走了&#xff0c;门前的池水 干了一半。 屋后驼背的柳树 头发散落了一地&#xff0c; 老房子蹲在坟边&#xff0c;屋顶的白云 仍在风中奔跑。 安装配置 要在Docker中安装MongoDB并启用远程连接&…

CDP体系化建设1-CDP综述

前言 从CRM到DMP&#xff0c;再到CDP的横空出世&#xff0c;数据产品领域推陈出新的速度也挺快的。 而了解CDP的人可能会说&#xff0c;CDP和BI一样&#xff0c;糅杂了太多东西&#xff0c;都不知道如何概括。 在我看来&#xff0c;CDP也是一个看似简单&#xff0c;但是需要借助…

如何使用Imagewheel+内网穿透搭建私人图床实现公网访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

使用 Redis 构建轻量的向量数据库应用:图片搜索引擎(一)

本篇文章聊聊更轻量的向量数据库方案&#xff1a;Redis。 以及基于 Redis 来快速实现一个高性能的本地图片搜索引擎&#xff0c;在本地环境中&#xff0c;使用最慢的稠密向量检索方式来在一张万图片中查找你想要的图片&#xff0c;总花费时间都不到十分之一秒。 写在前面 接着…