第一次发帖,代码写的不好的地方见谅

两个模块

import cv2

import numpy as np

这里用numpy创建了一个纯白色的背景

img = np.full((480,640,3),255,np.uint8)

下面设置了三个全局变量,在回调函数里面要用到

white这个主要用来实时显示

最后绘制在img上面

white = img.copy()
point = None
on = 0

这里简单写了个函数,主要用于绘制椭圆的时候解决反方向移动鼠标 的问题

# 取正数函数
def positive_number(num):if num < 0:return num*-1return num

然后就是三个回调函数了,其实也可以写成一个,这个看自己了

画直线其实和矩形区别不大,椭圆麻烦一点

# 画直线回调函数
def draw_line(event,x,y,flags,param):global point,white,onif event == 1:on = 1point = (x,y)if event == 4:cv2.line(img,point,(x,y),(0,0,0),10,8)point = Noneon = 0if on == 1:white = img.copy()cv2.line(white,point,(x,y),(0,0,0),10,8)# 画矩形回调函数
def draw_rect(event,x,y,flags,param):global point,white,onif event == 1:on = 1point = (x,y)if event == 4:cv2.rectangle(img,point,(x,y),(0,0,0),10,8)point = Noneon = 0if on == 1:white = img.copy()cv2.rectangle(white,point,(x,y),(0,0,0),10,8)# 画椭圆回调函数
def draw_ellipse(event,x,y,flags,param):global point,white,onif event == 1:on = 1point = (x,y)if event == 4:x1,y1 = pointwidth = (x-x1)//2height = (y-y1)//2center = (x1+width,y1+height)cv2.ellipse(img,center,(positive_number(width),positive_number(height)),0,0,360,(0,0,0),5,8)point = Noneon = 0if on == 1:x1,y1 = pointwidth = (x-x1)//2height = (y-y1)//2center = (x1+width,y1+height)white = img.copy()cv2.ellipse(white,center,(positive_number(width),positive_number(height)),0,0,360,(0,0,0),5,8)

剩下的就是对键盘的监听和循环显示

while True:cv2.imshow('palette',white)    key = cv2.waitKey(10)if key &0xFF == ord('q'):breakif key &0xFF == ord('l'):# 画直线cv2.setMouseCallback('palette',draw_line)if key &0xFF == ord('r'):# 画矩形cv2.setMouseCallback('palette',draw_rect)if key &0xFF == ord('e'):# 画椭圆  也可以画圆cv2.setMouseCallback('palette',draw_ellipse)cv2.destroyAllWindows()

最后成果就是这样的了

还有许多可以优化的地方,这里就是随便写的玩的

利用OpenCV进行动态画椭圆,直线,矩形相关推荐

  1. opencv 识别长方形_利用opencv识别并提取图片中的矩形

    这次是利用opencv来识别图片中的矩形. 其中遇到的问题主要是识别轮廓时矩形内部的形状导致轮廓不闭合. 过程如下: **1. 对输入灰度图片进行高斯滤波 2. 做灰度直方图,提取阈值,做二值化处理 ...

  2. Python+OpenCV 图像处理系列(3)—— 画线、矩形、画圆、画椭圆、画多边形

    OpenCV 中的绘图函数 使用 OpenCV 绘制不同几何图形,其中包括的函数有 cv2.line() cv2.circle() cv2.rectangle() cv2.ellipse() cv2. ...

  3. c++ builder 用鼠标画直线、椭圆、矩形

    //在窗体上绘制直线椭圆.矩形. //1.思路:用鼠标按下和松开确定要花图像的开始和结束位置,并设定好Pen和Brush的各种属性. //2.界面 //3.代码: //---------------- ...

  4. Python 用 OpenCV 画椭圆 (5)

    利用 OpenCV 自带的 ellipse() 函数画椭圆 并显示,其函数声明如下: cv2.ellipse(img, center, axes, rotateAngle, startAngle, e ...

  5. VC/MFC动态画线(橡皮线),画圆,画椭圆,画矩形

    2012年12月7日 22:42:14 今天我在csdn网站上通过学习别人的博客学习到了动态画矩形,画线的方法,这使得我对Windows的消息循环机制有了更深刻的理解.首先来总结一下我今天的收获,呵呵 ...

  6. 用JAVA代码利用坐标构造三角形、椭圆、直线并求其周长、面积

    用JAVA代码利用坐标构造三角形.椭圆.线段线并求其周长.面积 主测试程序 ShapeCreator类 Shape类 Oval类 line类 Rectangle类 Triangle类 本程序主要靠编写 ...

  7. 图像处理控件功能演示: 在 C# 中绘制直线、圆弧、椭圆、矩形等形状

    Aspose.Imaging for .NET是一个可以让开发人员可以创建.编辑.画图.转换图像的图像处库,提供了一些开发平台原有功能基础之上的一些新特性.它独立于其他应用程序, Aspose.Ima ...

  8. Opencv画出斜矩形

    描述 opencv可以利用rect,绘制出与图像坐标系u轴v轴平行的,姿态正的矩形 如果该矩形绕其原点旋转,如何画出呢? 思路 利用原矩形的四个点,根据旋转角度,计算出新的四个端点.最后将四个端点利用 ...

  9. python画椭圆-python opencv圆、椭圆与任意多边形的绘制实例详解

    圆形的绘制 : OpenCV中使用circle(img,center,radius,color,thickness=None,lineType=None,shift=None)函数来绘制圆形 impo ...

最新文章

  1. EntityFramework 并发处理
  2. 【新星计划】MATLAB-冒号:符号详解
  3. 技术系列课回顾 | 直播点播窄带高清之 JND 感知编码技术
  4. SSM项目 Jquery实现From表单提交 json后台并接受
  5. Linux上搭建h2引擎加载h2文件
  6. SQL实战篇:SQL解决近X天的问题
  7. Redis学习笔记1-Redis数据类型
  8. 【C语言】第八章 地址操作与指针 题解
  9. HDU - 1281 棋盘游戏
  10. 从2-3-4树谈到Red-Black Tree(红黑树)
  11. AGV机器人RFID传感器CK-G06A与西门子1200PLC应用手册
  12. M2Det 论文笔记
  13. u盘文件名乱码linux,U盘文件名乱码的原因和解决办法
  14. 全球及中国墙绘机行业运营模式及市场供需预测报告2022-2028年
  15. 面试鸭专业面试刷题网站源码 支持自由组卷/在线刷题等功能
  16. 平安京s9服务器维护,决战平安京S9赛季对局环境调整计划公布 S9麒麟刷新机制等调整预告[多图]...
  17. strtol()函数介绍
  18. 实时显示当前时间(英文版)
  19. ap计算机基础知识讲解,AP计算机课程与考试解读
  20. Android记步(运动)应用

热门文章

  1. 如何实现微信和淘宝的扫码登录 ?
  2. 高性能网络编程(一)----accept建立连接
  3. 基于FPGA的电子万年历设计
  4. windows服务器443端口被占用---云锁
  5. 关于泰勒展开的细节-《三体》读后感的读后感
  6. 中国计算机学会(CCF)——推荐国际学术会议和期刊目录
  7. 如何群发邮件,5秒帮你搞定
  8. 玩转华为数据中心交换机系列 | 配置动态LACP模式的链路聚合示例
  9. 树莓派是网盘?nextcloud在树莓派上的应用
  10. Apache Kafka的流式SQL引擎——KSQL