完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
3个回答
|
|
思路分析
类似于液晶触摸的书写,我们来研究下如何实现绘图功能。 本质上,绘图是绘制线条,曲线可以分解成很多直线,直线可以分解成很多点,因此,就先从绘制点开始。想法有了,可以开始着手了。 |
|
|
|
写出基本结构
由于Python的便捷性,先采用Python实现,不用太顾及语法问题。 下面先调出第一个版本的源码。 import cv2import numpy as np# 创建一个窗口cv2.namedWindow(‘image’)# 创建一个黑色图像img = np.zeros((800,600,3), np.uint8)# 定义一个回调函数,用于绘制图像def draw_point(event,x,y,flags,param): if event == cv2.EVENT_LBUTTONDOWN: cv2.circle(img,(x,y),20,(255,0,0),-1)# 将回调函数绑定到窗口上cv2.setMouseCallback(‘image’, draw_point)# 主循环显示图像while(True): cv2.imshow(‘image’,img) if (cv2.waitKey(1) == ord(‘q’)): breakcv2.destroyAllWindows()# 保存图像cv2.imwrite( |
|
|
|
在上一版本中,鼠标按下后,只能画一个点,在此情况下,需要改进为鼠标按下后,就一直画点,于是,改进后,就有了以下代码
import cv2 import numpy as np isMouseLBDown = Falsedef draw_circle(event,x,y,flags,param): print(event) global isMouseLBDown if event == cv2.EVENT_LBUTTONDOWN: # 检测到鼠标左键按下 print(“mouse down”) isMouseLBDown = True cv2.circle(img,(x,y),5,(255,0,0),-1) elif event == cv2.EVENT_LBUTTONUP: # 检测到鼠标左键抬起 isMouseLBDown = False print(“mouse up”) elif event == cv2.EVENT_MOUSEMOVE: # 如果鼠标按下并且鼠标在移动 if isMouseLBDown: print(“drawing”) cv2.circle(img,(x,y),5,(255,0,0),-1)# 创建一个黑色图像,并绑定窗口和鼠标回调函数 img = np.zeros((512,512,3), np.uint8) cv2.namedWindow(‘image’)# 设置鼠标事件回调cv2.setMouseCallback(‘image’,draw_circle) while(True): cv2.imshow(‘image’,img) if cv2.waitKey(1) == ord(‘q’): break cv2.destroyAllWindows()cv2.imwrite(“OpenCV_Paint.png”, img) |
|
|
|
只有小组成员才能发言,加入小组>>
695 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
655浏览 9评论
651浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
783浏览 6评论
630浏览 5评论
670浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 20:54 , Processed in 0.978476 second(s), Total 52, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号