Python OpenCv学习底子知识二
文章目次
简介
本文接着上一篇文章:
Python OpenCv学习底子知识一(链接:https://blog.caogenba.net/m0_54218263/article/details/122491612?spm=1001.2014.3001.5501),继续先容Python cv2模块中的一些常用的根本使用与使用的方法,渴望对各人有一些资助。
一、cv2绘图
- """
- cv2 绘图
- 绘制图像的方法
- """
- import numpy as np
- import cv2
- def test1():
- """
- 画一条线
- """
- #Create a black image
- img = np.zeros((512,512,3),np.uint8)
- # 产生一个画布
- #draw a diagonal blue line with thickness of 5 px
- cv2.line(img,(0,0),(260,260),(255,0,0),5)
- #为了演示,建窗口显示出来
- cv2.namedWindow('image',cv2.WINDOW_NORMAL)
- cv2.resizeWindow('image',1000,1000)#定义frame的大小
- cv2.imshow('image',img)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- def test2():
- """
- 画一个矩形
- """
-
- #Create a black image
- img = np.zeros((512,512,3),np.uint8)
- # 相当于也是生成一个画布
- cv2.rectangle(img,(350,0),(500,128),(0,255,0),3)
- cv2.namedWindow('image',cv2.WINDOW_NORMAL)
- cv2.resizeWindow('image',1000,1000)#定义frame的大小
- cv2.imshow('image',img)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- def test3():
- """
- 画一个圆
- """
- #Create a black image
- img = np.zeros((512,512,3),np.uint8)
- # 创建一个画布
- cv2.rectangle(img,(350,0),(500,128),(0,255,0),3)#矩形
- cv2.circle(img,(425,63),63,(0,0,255),-1)#圆,-1为向内填充
- # 这里其实是在矩形之中有一个圆形的
- cv2.namedWindow('image',cv2.WINDOW_NORMAL)
- cv2.resizeWindow('image',1000,1000)#定义frame的大小
- cv2.imshow('image',img)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- def test4():
- """
- 画一个椭圆
- """
- #Create a black image
- img = np.zeros((512,512,3),np.uint8)
- cv2.ellipse(img,(256,256),(100,50),0,0,360,255,-1)
- cv2.namedWindow('image',cv2.WINDOW_NORMAL)
- cv2.resizeWindow('image',1000,1000)#定义frame的大小
- cv2.imshow('image',img)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- def test5():
- """
- 画一个多边形
- """
-
- #Create a black image
- img = np.zeros((512,512,3),np.uint8)
- pts=np.array([[100,50],[200,300],[500,200],[400,100]],np.int32)
- # 根据点的位置来绘制多边形。
- pts = pts.reshape((-1,1,2))
- #这里reshape的第一个参数为-1,表明这一维度的长度是根据后面的维度计算出来的
- cv2.polylines(img,[pts],True,(0,255,255))
- #注意第三个参数若是False,我们得到的是不闭合的线
- #为了演示,建窗口显示出来
- cv2.namedWindow('image',cv2.WINDOW_NORMAL)
- cv2.resizeWindow('image',1000,1000)#定义frame的大小
- cv2.imshow('image',img)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- def test6():
- """
- 添加文字
- """
-
- #Create a black image
- img = np.zeros((512,512,3),np.uint8)
- font = cv2.FONT_HERSHEY_SIMPLEX
- cv2.putText(img,'OpenCV',(10,300), font, 4,(255,255,255),2,cv2.LINE_AA)
- #为了演示,建窗口显示出来
- cv2.namedWindow('image',cv2.WINDOW_NORMAL)
- cv2.resizeWindow('image',1000,1000)#定义frame的大小
- cv2.imshow('image',img)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- # 使用 shift + enter 可以实现单步的调试的工作
- # shift + enter => 单步调试。
- if __name__ == '__main__':
- # test1()
- # test2()
- # test3()
- # test4()
- # test5()
- test6()
-
- """
- 显示结果也可以使用如下所示的代码:
- winname='example'
- cv2.namedWindow(winname)
- cv2.imshow(winname,img)
- cv2.waitKey(0)
- cv2.destroyAllWindow(winname)
- """
复制代码
二、鼠标事故处理处罚
- """
- 鼠标事件处理
- """
- import cv2
- import numpy as np
- # mouse callback function
- def draw_circle(event, x, y, flags, param):
- if event == cv2.EVENT_LBUTTONDBLCLK:
- cv2.circle(img, (x, y), 100, (255, 0, 0), -1)
- # 回调函数的功能
- # 创建图像与窗口并将窗口与回调函数绑定
- img = np.zeros((500, 500, 3), np.uint8)
- cv2.namedWindow('image')
- cv2.setMouseCallback('image', draw_circle) # 回调函数的绑定。
- # 创建回调函数的绑定机制
- while (1):
- cv2.imshow('image', img)
- if cv2.waitKey(1)&0xFF == ord('q'):#按q键退出
- break
- cv2.destroyAllWindows()
复制代码
三、鼠标事故处理处罚进阶
- """
- 仍然是鼠标点击事件,但是更加的高级
- """
- import cv2
- import numpy as np
- #当鼠标按下时为True
- drawing = False
- #如果mode为true时绘制矩形,按下'm'变成绘制曲线
- mode = True
- ix,iy = -1,-1
- #创建回调函数
- def draw_circle(event,x,y,flags,param):
- global ix,iy,drawing,mode
- #当按下左键时返回起始位置坐标
- if event == cv2.EVENT_LBUTTONDOWN:
- drawing = True
- ix,iy=x,y
- #当左键按下并移动时绘制图形,event可以查看移动,flag查看是否按下
- elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:
- if drawing == True:
- if mode == True:
- cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
- else:
- #绘制圆圈,小圆点连在一起就成了线,3代表笔画的粗细
- cv2.circle(img,(x,y),3,(0,0,255),-1)
-
- #当鼠标松开时停止绘图
- elif event ==cv2.EVENT_LBUTTONUP:
- drawing == False
- '''
- 下面把回调函数与OpenCV窗口绑定在一起,在主循环中奖'm'键与模式转换绑定在一起
- '''
- img = np.zeros((500,500,3),np.uint8)
- cv2.namedWindow('image')
- cv2.setMouseCallback('image',draw_circle)
- # 绑定事件
- # while 执行
- while(1):
- cv2.imshow('image',img)
- k=cv2.waitKey(1)
- # 相当于是25ms
- if k ==ord('m'):
- # 切换状态
- mode=not mode
- elif k==ord('q'):
- # 退出
- break
- cv2.destroyAllWindows()
- # 销毁窗口
复制代码
四、总结
以上就是cv2模块绘制图像以及鼠标事故处理处罚的相干代码,谢谢各人的阅读与支持,喜欢的话就点个赞吧。我会不屈不挠继续加油创作下去的呢。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |