• 售前

  • 售后

热门帖子
入门百科

Python OpenCv学习底子知识二

[复制链接]
李圆子wzl 显示全部楼层 发表于 2022-1-16 19:32:46 |阅读模式 打印 上一主题 下一主题
Python OpenCv学习底子知识二

  
   文章目次

  
  
  简介

  本文接着上一篇文章:
Python OpenCv学习底子知识一(链接:https://blog.caogenba.net/m0_54218263/article/details/122491612?spm=1001.2014.3001.5501),继续先容Python cv2模块中的一些常用的根本使用与使用的方法,渴望对各人有一些资助。
  一、cv2绘图

  1. """
  2. cv2 绘图
  3. 绘制图像的方法
  4. """
  5. import numpy as np
  6. import cv2
  7. def test1():
  8.     """
  9.     画一条线
  10.     """
  11.     #Create a black image
  12.     img = np.zeros((512,512,3),np.uint8)
  13.     # 产生一个画布
  14.     #draw a diagonal blue line with thickness of 5 px
  15.     cv2.line(img,(0,0),(260,260),(255,0,0),5)
  16.     #为了演示,建窗口显示出来
  17.     cv2.namedWindow('image',cv2.WINDOW_NORMAL)
  18.     cv2.resizeWindow('image',1000,1000)#定义frame的大小
  19.     cv2.imshow('image',img)
  20.     cv2.waitKey(0)
  21.     cv2.destroyAllWindows()
  22. def test2():
  23.     """
  24.     画一个矩形
  25.     """
  26.    
  27.     #Create a black image
  28.     img = np.zeros((512,512,3),np.uint8)
  29.     # 相当于也是生成一个画布
  30.     cv2.rectangle(img,(350,0),(500,128),(0,255,0),3)
  31.     cv2.namedWindow('image',cv2.WINDOW_NORMAL)
  32.     cv2.resizeWindow('image',1000,1000)#定义frame的大小
  33.     cv2.imshow('image',img)
  34.     cv2.waitKey(0)
  35.     cv2.destroyAllWindows()
  36. def test3():
  37.     """
  38.     画一个圆
  39.     """
  40.     #Create a black image
  41.     img = np.zeros((512,512,3),np.uint8)
  42.     # 创建一个画布
  43.     cv2.rectangle(img,(350,0),(500,128),(0,255,0),3)#矩形
  44.     cv2.circle(img,(425,63),63,(0,0,255),-1)#圆,-1为向内填充
  45.     # 这里其实是在矩形之中有一个圆形的
  46.     cv2.namedWindow('image',cv2.WINDOW_NORMAL)
  47.     cv2.resizeWindow('image',1000,1000)#定义frame的大小
  48.     cv2.imshow('image',img)
  49.     cv2.waitKey(0)
  50.     cv2.destroyAllWindows()
  51. def test4():
  52.     """
  53.     画一个椭圆
  54.     """
  55.     #Create a black image
  56.     img = np.zeros((512,512,3),np.uint8)
  57.     cv2.ellipse(img,(256,256),(100,50),0,0,360,255,-1)
  58.     cv2.namedWindow('image',cv2.WINDOW_NORMAL)
  59.     cv2.resizeWindow('image',1000,1000)#定义frame的大小
  60.     cv2.imshow('image',img)
  61.     cv2.waitKey(0)
  62.     cv2.destroyAllWindows()
  63. def test5():
  64.     """
  65.     画一个多边形
  66.     """
  67.    
  68.     #Create a black image
  69.     img = np.zeros((512,512,3),np.uint8)
  70.     pts=np.array([[100,50],[200,300],[500,200],[400,100]],np.int32)
  71.     # 根据点的位置来绘制多边形。
  72.     pts = pts.reshape((-1,1,2))
  73.     #这里reshape的第一个参数为-1,表明这一维度的长度是根据后面的维度计算出来的
  74.     cv2.polylines(img,[pts],True,(0,255,255))
  75.     #注意第三个参数若是False,我们得到的是不闭合的线
  76.     #为了演示,建窗口显示出来
  77.     cv2.namedWindow('image',cv2.WINDOW_NORMAL)
  78.     cv2.resizeWindow('image',1000,1000)#定义frame的大小
  79.     cv2.imshow('image',img)
  80.     cv2.waitKey(0)
  81.     cv2.destroyAllWindows()
  82. def test6():
  83.     """
  84.     添加文字
  85.     """
  86.         
  87.     #Create a black image
  88.     img = np.zeros((512,512,3),np.uint8)
  89.     font = cv2.FONT_HERSHEY_SIMPLEX  
  90.     cv2.putText(img,'OpenCV',(10,300), font, 4,(255,255,255),2,cv2.LINE_AA)  
  91.     #为了演示,建窗口显示出来
  92.     cv2.namedWindow('image',cv2.WINDOW_NORMAL)
  93.     cv2.resizeWindow('image',1000,1000)#定义frame的大小
  94.     cv2.imshow('image',img)
  95.     cv2.waitKey(0)
  96.     cv2.destroyAllWindows()
  97.     # 使用 shift + enter 可以实现单步的调试的工作
  98.     # shift + enter => 单步调试。
  99. if __name__ == '__main__':
  100.     # test1()
  101.     # test2()
  102.     # test3()
  103.     # test4()
  104.     # test5()
  105.     test6()
  106.    
  107. """
  108. 显示结果也可以使用如下所示的代码:
  109. winname='example'
  110. cv2.namedWindow(winname)
  111. cv2.imshow(winname,img)
  112. cv2.waitKey(0)
  113. cv2.destroyAllWindow(winname)
  114. """
复制代码
二、鼠标事故处理处罚

  1. """
  2. 鼠标事件处理
  3. """
  4. import cv2
  5. import numpy as np
  6. # mouse callback function
  7. def draw_circle(event, x, y, flags, param):
  8.     if event == cv2.EVENT_LBUTTONDBLCLK:
  9.         cv2.circle(img, (x, y), 100, (255, 0, 0), -1)
  10. # 回调函数的功能
  11. # 创建图像与窗口并将窗口与回调函数绑定
  12. img = np.zeros((500, 500, 3), np.uint8)
  13. cv2.namedWindow('image')
  14. cv2.setMouseCallback('image', draw_circle)  # 回调函数的绑定。
  15. # 创建回调函数的绑定机制
  16. while (1):
  17.     cv2.imshow('image', img)
  18.     if cv2.waitKey(1)&0xFF == ord('q'):#按q键退出
  19.         break
  20. cv2.destroyAllWindows()
复制代码
三、鼠标事故处理处罚进阶

  1. """
  2. 仍然是鼠标点击事件,但是更加的高级
  3. """
  4. import cv2
  5. import numpy as np
  6. #当鼠标按下时为True
  7. drawing = False
  8. #如果mode为true时绘制矩形,按下'm'变成绘制曲线
  9. mode = True
  10. ix,iy = -1,-1
  11. #创建回调函数
  12. def draw_circle(event,x,y,flags,param):
  13.     global ix,iy,drawing,mode
  14.     #当按下左键时返回起始位置坐标
  15.     if event == cv2.EVENT_LBUTTONDOWN:
  16.         drawing = True
  17.         ix,iy=x,y
  18.     #当左键按下并移动时绘制图形,event可以查看移动,flag查看是否按下
  19.     elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:
  20.         if drawing == True:
  21.             if mode == True:
  22.                 cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
  23.             else:
  24.                 #绘制圆圈,小圆点连在一起就成了线,3代表笔画的粗细
  25.                 cv2.circle(img,(x,y),3,(0,0,255),-1)
  26.               
  27.     #当鼠标松开时停止绘图
  28.     elif event ==cv2.EVENT_LBUTTONUP:
  29.         drawing == False
  30. '''
  31. 下面把回调函数与OpenCV窗口绑定在一起,在主循环中奖'm'键与模式转换绑定在一起
  32. '''
  33. img = np.zeros((500,500,3),np.uint8)
  34. cv2.namedWindow('image')
  35. cv2.setMouseCallback('image',draw_circle)
  36. # 绑定事件
  37. # while 执行
  38. while(1):
  39.     cv2.imshow('image',img)
  40.     k=cv2.waitKey(1)
  41.     # 相当于是25ms
  42.     if k ==ord('m'):
  43.         # 切换状态
  44.         mode=not mode
  45.     elif k==ord('q'):
  46.         # 退出
  47.         break
  48. cv2.destroyAllWindows()
  49. # 销毁窗口
复制代码
四、总结

  以上就是cv2模块绘制图像以及鼠标事故处理处罚的相干代码,谢谢各人的阅读与支持,喜欢的话就点个赞吧。我会不屈不挠继续加油创作下去的呢。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作