【Opencv】【Python】Python中opencv模組cv2一些函數用法及簡介

來源:互聯網
上載者:User
前言

最近在做卡片上的數字識別。調用caffe模組,直接用的mnist模型,不過這篇文章不講caffe。

需要先對圖片進行一系列預先處理,把卡片上的數字分離出來,有點OCR的感覺。

我把這次使用到的所有opencv函數簡單寫一下。 1. 讀取視頻 cv2.VideoCapture()

參數1:可以是數字,對應網路攝影機編號。可以是視頻名。

如果用的網路攝影機,下面要用迴圈來不斷讀幀。

c = cv2.VideoCapture(0)while 1:    ret, image = c.read()    cv2.imshow("Origin", image) # 顯示畫面    cv2.waitKey(1) # 一定要搭配這句才出畫面

2. 等待 cv2.waitKey()

參數1:等待時間,單位毫秒。

一般與cv2.imshow()搭配使用

另一個實用的功能就是通過按鍵進入if條件陳述式

比如下面按ESC關閉視窗,退出迴圈,結束程式。

c = cv2.VideoCapture(0)while 1:    ret, image = c.read()    cv2.imshow("Origin", image)    key = cv2.waitKey(1)    if key == 27:        cv2.destroyAllWindows()        break

3. 映像加文字cv2.putText()

參數1:映像

參數2:文字內容

參數3:座標位置

參數4:字型

參數5:字型大小

參數6:顏色

參數7:字型粗細

    c = cv2.VideoCapture(0)    while 1:        ret, image = c.read()        cv2.putText(image,‘HandsomeHans’,(220,130),cv2.FONT_HERSHEY_SIMPLEX,4,(127,127,255),2)        cv2.imshow("Origin", image)        key = cv2.waitKey(1)        if key == 27:            cv2.destroyAllWindows()            break

4. 映像加框 cv2.rectangle()

參數1:映像

參數2:左上方座標

參數3:右下角座標

參數4:框的顏色

參數5:框的粗細


5. 提取映像輪廓 cv2.findContours()

參數1:映像

參數2:擷取規則。cv2.RETR_EXTERNAL:只找外輪廓,cv2.RETR_TREE:內外輪廓都找。

參數3:輸出輪廓內容格式。cv2.CHAIN_APPROX_SIMPLE:輸出少量輪廓點。cv2.CHAIN_APPROX_NONE:輸出大量輪廓點。

輸出參數1:映像

輸出參數2:輪廓列表

輸出參數3:層級

contours_map, contours, hierarchy = cv2.findContours(image,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

6. 畫出輪廓 cv2.drawContours()

參數1:映像

參數2:輪廓列表

參數3:輪廓索引,如果負數則畫出所有輪廓。

參數4:輪廓顏色

參數5:輪廓粗細

cv2.drawContours(image,contours,-1,(0,0,255),2)

7. 判斷像素點是否在某一輪廓內 cv2.pointPolygonTest()

參數1:某一輪廓列表

參數2:像素點座標

參數3:如果為True則輸出該像素點到輪廓最近距離。如果為False,則輸出為正表示在輪廓內,0為輪廓上,負為輪廓外。

result = cv2.pointPolygonTest(biggest, (w,h), False)

8. 求輪廓面積 cv2.contourArea()

參數1:某一輪廓

area = cv2.contourArea(contours[i])

9. 求包含輪廓的最小方框 cv2.minAreaRect()

參數1:某一輪廓

輸出參數1:四個角點座標和位移角度

求最小方框並將其畫出:

rect = cv2.minAreaRect(contours[i])box = np.int0(cv2.boxPoints(rect)) # boxPoints()是opencv3的函數cv2.drawContours(image,[box],0,(0,255,255),2)

10. 求包含輪廓的正方框 cv2.boundingRect()

參數1:某一輪廓

x, y, w, h = cv2.boundingRect(contours[i])

11. 映像色彩轉換 cv2.cvtColor()

參數1:映像

參數2:轉換方式。cv2.COLOR_BGR2GRAY:轉換為灰階圖。cv2.COLOR_BGR2HSV:轉換為HSV色彩空間。

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

12. 高斯平滑濾波 cv2.GaussianBlur()

參數1:映像

參數2:濾波器大小

參數3:標準差

gray = cv2.GaussianBlur(gray,(3,3),0) #模糊映像

13. 中值濾波 cv2.medianBlur()

參數1:映像

參數2:濾波尺寸

gray = cv2.medianBlur(gray,5) # 填充白色噪點

14. 映像二值化 cv2.threshold()

參數1:灰階映像

參數2:閾值

參數3:最大值

參數4:轉換方式 cv2.THRESH_BINARY、cv2.THRESH_BINARY_INV、cv2.THRESH_TRUNC、cv2.THRESH_TOZERO、cv2.THRESH_TOZERO_INV

ret, thres = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

15. 擴充映像 cv2.copyMakeBorder()

參數1:映像

參數2:top擴充長度

參數3:down擴充長度

參數4:left

參數5:right

參數6:邊界類型:

BORDER_CONSTANT:常量,增加的變數通通為value色 [value][value] | abcdef | [value][value][value]

BORDER_REFLICATE:直接用邊界的顏色填充, aaaaaa | abcdefg | gggg
BORDER_REFLECT:倒映,abcdefg | gfedcbamn | nmabcd
BORDER_REFLECT_101:倒映,和上面類似,但在倒映時,會把邊界空開,abcdefg | egfedcbamne | nmabcd
BORDER_WRAP:類似於這種方式abcdf | mmabcdf | mmabcd


參數7:常量數值

iimgg = cv2.copyMakeBorder(num_thres,top,down,left,right,cv2.BORDER_CONSTANT,value=0)

16. 旋轉映像 cv2.getRotationMatrix2D()

參數1:旋轉中心點

參數2:旋轉角度

參數3:縮放大小

輸出參數1:旋轉矩陣

rotateMatrix = cv2.getRotationMatrix2D(center=(thres.shape[1]/2, thres.shape[0]/2), angle = rect[2], scale = 1)rotImg = cv2.warpAffine(thres, rotateMatrix, (thres.shape[1], thres.shape[0]))




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.