Python OpenCv學習基礎知識二
文章目錄
- Python OpenCv學習基礎知識二
- 簡介
- 一、cv2繪圖
- 二、滑鼠事件處理
- 三、滑鼠事件處理進階
- 四、總結
簡介
本文接著上一篇文章:
Python OpenCv學習基礎知識一(鏈接:https://blog.csdn.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模塊繪制影像以及滑鼠事件處理的相關代碼,謝謝大家的閱讀與支持,喜歡的話就點個贊吧,我會再接再厲繼續加油創作下去的呢,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413647.html
標籤:其他
