利用OpenCV进行动态画椭圆,直线,矩形
第一次发帖,代码写的不好的地方见谅
两个模块
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进行动态画椭圆,直线,矩形相关推荐
- opencv 识别长方形_利用opencv识别并提取图片中的矩形
这次是利用opencv来识别图片中的矩形. 其中遇到的问题主要是识别轮廓时矩形内部的形状导致轮廓不闭合. 过程如下: **1. 对输入灰度图片进行高斯滤波 2. 做灰度直方图,提取阈值,做二值化处理 ...
- Python+OpenCV 图像处理系列(3)—— 画线、矩形、画圆、画椭圆、画多边形
OpenCV 中的绘图函数 使用 OpenCV 绘制不同几何图形,其中包括的函数有 cv2.line() cv2.circle() cv2.rectangle() cv2.ellipse() cv2. ...
- c++ builder 用鼠标画直线、椭圆、矩形
//在窗体上绘制直线椭圆.矩形. //1.思路:用鼠标按下和松开确定要花图像的开始和结束位置,并设定好Pen和Brush的各种属性. //2.界面 //3.代码: //---------------- ...
- Python 用 OpenCV 画椭圆 (5)
利用 OpenCV 自带的 ellipse() 函数画椭圆 并显示,其函数声明如下: cv2.ellipse(img, center, axes, rotateAngle, startAngle, e ...
- VC/MFC动态画线(橡皮线),画圆,画椭圆,画矩形
2012年12月7日 22:42:14 今天我在csdn网站上通过学习别人的博客学习到了动态画矩形,画线的方法,这使得我对Windows的消息循环机制有了更深刻的理解.首先来总结一下我今天的收获,呵呵 ...
- 用JAVA代码利用坐标构造三角形、椭圆、直线并求其周长、面积
用JAVA代码利用坐标构造三角形.椭圆.线段线并求其周长.面积 主测试程序 ShapeCreator类 Shape类 Oval类 line类 Rectangle类 Triangle类 本程序主要靠编写 ...
- 图像处理控件功能演示: 在 C# 中绘制直线、圆弧、椭圆、矩形等形状
Aspose.Imaging for .NET是一个可以让开发人员可以创建.编辑.画图.转换图像的图像处库,提供了一些开发平台原有功能基础之上的一些新特性.它独立于其他应用程序, Aspose.Ima ...
- Opencv画出斜矩形
描述 opencv可以利用rect,绘制出与图像坐标系u轴v轴平行的,姿态正的矩形 如果该矩形绕其原点旋转,如何画出呢? 思路 利用原矩形的四个点,根据旋转角度,计算出新的四个端点.最后将四个端点利用 ...
- python画椭圆-python opencv圆、椭圆与任意多边形的绘制实例详解
圆形的绘制 : OpenCV中使用circle(img,center,radius,color,thickness=None,lineType=None,shift=None)函数来绘制圆形 impo ...
最新文章
- EntityFramework 并发处理
- 【新星计划】MATLAB-冒号:符号详解
- 技术系列课回顾 | 直播点播窄带高清之 JND 感知编码技术
- SSM项目 Jquery实现From表单提交 json后台并接受
- Linux上搭建h2引擎加载h2文件
- SQL实战篇:SQL解决近X天的问题
- Redis学习笔记1-Redis数据类型
- 【C语言】第八章 地址操作与指针 题解
- HDU - 1281 棋盘游戏
- 从2-3-4树谈到Red-Black Tree(红黑树)
- AGV机器人RFID传感器CK-G06A与西门子1200PLC应用手册
- M2Det 论文笔记
- u盘文件名乱码linux,U盘文件名乱码的原因和解决办法
- 全球及中国墙绘机行业运营模式及市场供需预测报告2022-2028年
- 面试鸭专业面试刷题网站源码 支持自由组卷/在线刷题等功能
- 平安京s9服务器维护,决战平安京S9赛季对局环境调整计划公布 S9麒麟刷新机制等调整预告[多图]...
- strtol()函数介绍
- 实时显示当前时间(英文版)
- ap计算机基础知识讲解,AP计算机课程与考试解读
- Android记步(运动)应用