😶?🌫?😶?🌫?😶?🌫?😶?🌫?Take your time ! 😶?🌫?😶?🌫?😶?🌫?😶?🌫?
💥個人主頁:🔥🔥🔥大魔王🔥🔥🔥
💥所屬專欄:🔥魔王的修煉之路–Computer vision🔥
如果你覺得這篇文章對你有幫助,請在文章結尾處留下你的點贊👍和關注💖,支持一下博主。同時記得收藏?這篇文章,方便以后重新閱讀。
文章目錄
- 繪制圖形
- 鼠標畫圖
繪制圖形
import cv2 import numpy as npcv2.namedWindow("img", cv2.WINDOW_NORMAL) cv2.resizeWindow("img", 640, 480)img = np.zeros((480, 640, 3), np.uint8) print(img.shape)# 繪制圖形 # 線寬:默認 1,負數表示填充 # 注意順序,(x,y),這里是 長 和 高!# 繪制線段 # 參數:目標圖像,起始點,結束點,顏色,線寬(線沒有填充,不能為 -1),線型 # 最后參數:線型,只有 line() 和 putText() 有這個參數,值為(4,8(默認),16(抗鋸齒,平滑))。 cv2.line(img, (10, 200), (200, 200), (0, 0, 255), 10, 4) cv2.line(img, (10, 300), (200, 300), (0, 0, 255), 10, 16) # 繪制矩形 # 參數:目標圖像,左上角坐標,右下角坐標,顏色,線寬 cv2.rectangle(img, (20, 10), (100, 150), (0, 0, 255), -1) cv2.rectangle(img, (300, 150), (500, 250), (0, 0, 255), 1)# 繪制圓形 # 參數:目標圖像,圓心,半徑,顏色, 線寬 cv2.circle(img, (300, 300), 50, (0, 255, 0), 2)# 繪制橢圓 # 參數:目標圖像,中心點,長短軸一半,橢圓旋轉角度,從橢圓的多少角度開始,到多少角度結束,顏色,線寬 # 這里說的角度都是順時針的 cv2.ellipse(img, (400, 200), (100, 50), 45, 45, 90, (0, 255, 0), 1)# 繪制多邊形:多邊形填充需要專門的函數 # 參數:目標圖像,頂點列表(NumPy 數組格式),是否封閉路徑(首尾相連),顏色,線寬# 創建頂點列表 # np.array() 創建的數組原理:把給定的數據轉換成一個多維數組。 pts = np.array([(300, 10), (150,100), (450, 100)], np.int32) # 數據類型必須為 32位 有符號整型 # 有些函數接收的時候比較嚴格,需要調用 pts.reshape(-1, 1, 2),改變數組形狀(維度,方便函數調用)# 繪制多邊形 cv2.polylines(img, [pts], True, (0, 0, 255), 2) # 不能為 -1,填充需要專門的函數,單獨寫就行 # 第二個參數,需要一個點集列表,也就是可以同時繪制多個多邊形,即使只繪制一個,也是列表,需要加上中括號 []# 填充多邊形:單獨寫就行, 不需要提前繪制 # cv2.fillPoly(img, [pts], (0, 0, 255)) # 第二個參數,需要一個點集列表,也就是可以同時繪制多個多邊形,即使只繪制一個,也是列表,需要加上中括號 []# 繪制文本:目標圖像,要顯示文字,文字左下角坐標,字體類型,字號,顏色,線寬,線型 cv2.putText(img, "hahahhaha", (200, 200), cv2.FONT_HERSHEY_PLAIN, 3, (255, 255, 255))cv2.imshow("img", img)key = cv2.waitKey(0)cv2.destroyAllWindows()
鼠標畫圖
import cv2 import numpy as npcurshape = 0 # 記錄輸入的字符,用來判斷調用回調函數時繪制什么圖形 startpos = (0, 0) # 鼠標按下時的位置img = np.zeros((480, 640, 3), np.uint8)# 鼠標回調函數:第一個參數為鼠標事件,后面倆是鼠標當前坐標 def mouse_callback(event, x, y, flags, userdata): global curshape, startposif (event == cv2.EVENT_LBUTTONDOWN):startpos = (x, y)elif(event == cv2.EVENT_LBUTTONUP):if curshape == 0:cv2.line(img, startpos, (x, y), (0, 0, 255))elif curshape == 1:cv2.rectangle(img, startpos, (x, y), (0, 0, 255))elif curshape == 2:x_tmp = x - startpos[0]y_tmp = y - startpos[1]r = int((x_tmp ** 2 + y_tmp ** 2) ** 0.5) # 半徑必須為整型cv2.circle(img, startpos, r, (0, 0, 255))else:print("error: no shape!")cv2.namedWindow("win", cv2.WINDOW_NORMAL)# 設置鼠標回調:是一種注冊機制,以后只要這個窗口里鼠標有任何事件(移動、點擊、釋放等),我就調用你這個 mouse_callback 函數,并把事件類型、鼠標坐標等參數傳進去。 cv2.setMouseCallback("win", mouse_callback)while True:cv2.imshow("win", img)key = (cv2.waitKey(10) & 0xff) # 返回輸入字符的 ASCIIif key == ord('q'): # 記得將 字符串 轉為ASCII(整型)breakelif key == ord('a'):curshape = 0elif key == ord('s'):curshape = 1elif key == ord('d'):curshape = 2cv2.destroyAllWindows()
- 博主長期更新,博主的目標是不斷提升閱讀體驗和內容質量,如果你喜歡博主的文章,請點個贊或者關注博主支持一波,我會更加努力的為你呈現精彩的內容。
🌈專欄推薦
😈魔王的修煉之路–C語言
😈魔王的修煉之路–數據結構
😈魔王的修煉之路–C++
😈魔王的修煉之路–QT
😈魔王的修煉之路–算法
😈魔王的修煉之路–力扣
😈魔王的修煉之路–牛客
😈魔王的修煉之路–劍指offer
😈魔王的修煉之路–Linux
😈魔王的修煉之路–Computer vision
更新不易,希望得到友友的三連支持一波。收藏這篇文章,意味著你將永久擁有它,無論何時何地,都可以立即找到重新閱讀;關注博主,意味著無論何時何地,博主將永久和你一起學習進步,為你帶來有價值的內容。