[雪峰磁針石部落格]計算機視覺opcencv工具深度學習快速實戰2opencv快速入門
opencv基本操作
# -*- coding: utf-8 -*-
# Author: xurongzhong#126.com wechat:pythontesting qq:37391319
# 技術支援 釘釘群:21745728(可以加釘釘pythontesting邀請加入)
# qq群:144081101 591302926 567351477
# CreateDate: 2018-11-17
import imutils
import cv2
# 讀取圖片資訊
image = cv2.imread("jp.png")
(h, w, d) = image.shape
print("width={}, height={}, depth={}".format(w, h, d))
# 顯示圖片
cv2.imshow("Image", image)
cv2.waitKey(0)
# 訪問畫素
(B, G, R) = image[100, 50]
print("R={}, G={}, B={}".format(R, G, B))
# 選取圖片區間 ROI (Region of Interest)
roi = image[60:160, 320:420]
cv2.imshow("ROI", roi)
cv2.waitKey(0)
# 縮放
resized = cv2.resize(image, (200, 200))
cv2.imshow("Fixed Resizing", resized)
cv2.waitKey(0)
# 按比例縮放
r = 300.0 / w
dim = (300, int(h * r))
resized = cv2.resize(image, dim)
cv2.imshow("Aspect Ratio Resize", resized)
cv2.waitKey(0)
# 使用imutils縮放
resized = imutils.resize(image, width=300)
cv2.imshow("Imutils Resize", resized)
cv2.waitKey(0)
# 順時針旋轉45度
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, -45, 1.0)
rotated = cv2.warpAffine(image, M, (w, h))
cv2.imshow("OpenCV Rotation", rotated)
cv2.waitKey(0)
# 使用imutils旋轉
rotated = imutils.rotate(image, -45)
cv2.imshow("Imutils Rotation", rotated)
cv2.waitKey(0)
# 使用imutils無損旋轉
rotated = imutils.rotate_bound(image, 45)
cv2.imshow("Imutils Bound Rotation", rotated)
cv2.waitKey(0)
# apply a Gaussian blur with a 11x11 kernel to the image to smooth it,
# useful when reducing high frequency noise 高斯模糊
# https://www.pyimagesearch.com/2016/07/25/convolutions-with-opencv-and-python/
blurred = cv2.GaussianBlur(image, (11, 11), 0)
cv2.imshow("Blurred", blurred)
cv2.waitKey(0)
# 畫框
output = image.copy()
cv2.rectangle(output, (320, 60), (420, 160), (0, 0, 255), 2)
cv2.imshow("Rectangle", output)
cv2.waitKey(0)
# 畫圓
output = image.copy()
cv2.circle(output, (300, 150), 20, (255, 0, 0), -1)
cv2.imshow("Circle", output)
cv2.waitKey(0)
# 劃線
output = image.copy()
cv2.line(output, (60, 20), (400, 200), (0, 0, 255), 5)
cv2.imshow("Line", output)
cv2.waitKey(0)
# 輸出文字
output = image.copy()
cv2.putText(output, "https://china-testing.github.io", (10, 25),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
cv2.imshow("Text", output)
cv2.waitKey(0)
原圖:
選取圖片區間 ROI (Region of Interest)
縮放
按比例縮放
旋轉
使用imutils無損旋轉
高斯模糊
畫框
畫圓
劃線
輸出文字
執行時的輸出
$ python opencv_tutorial_01.py
width=600, height=322, depth=3
R=41, G=49, B=37
關於旋轉這塊,實際上pillow做的更好。比如同樣逆時針旋轉90度。
opencv的實現:
import imutils
import cv2
image = cv2.imread("jp.png")
rotated = imutils.rotate(image, 90)
cv2.imshow("Imutils Rotation", rotated)
cv2.waitKey(0)
pillow的實現:
from PIL import Image
im = Image.open("jp.png")
im2 = im.rotate(90, expand=True)
im2.show()
更多參考: python庫介紹-影像處理工具pillow中文文件-手冊(2018 5.*)
參考資料
- 技術支援qq群144081101(程式碼和模型存放)
- 本文最新版本地址
- 本文涉及的python測試開發庫 謝謝點贊!
- 本文相關海量書籍下載
- 2018最佳人工智慧機器學習工具書及下載(持續更新)
- 程式碼下載:https://itbooks.pipipan.com/fs/18113597-320636142
- 程式碼github地址:https://github.com/china-testing/python-api-tesing/tree/master/opencv_crash_deep_learning
識別俄羅斯方塊
# -*- coding: utf-8 -*-
# Author: xurongzhong#126.com wechat:pythontesting qq:37391319
# 技術支援 釘釘群:21745728(可以加釘釘pythontesting邀請加入)
# qq群:144081101 591302926 567351477
# CreateDate: 2018-11-19
# python opencv_tutorial_02.py --image tetris_blocks.png
import argparse
import imutils
import cv2
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,
help="path to input image")
args = vars(ap.parse_args())
image = cv2.imread(args["image"])
cv2.imshow("Image", image)
cv2.waitKey(0)
# 轉為灰度圖
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray", gray)
cv2.waitKey(0)
# 邊緣檢測
edged = cv2.Canny(gray, 30, 150)
cv2.imshow("Edged", edged)
cv2.waitKey(0)
# 門限
thresh = cv2.threshold(gray, 225, 255, cv2.THRESH_BINARY_INV)[1]
cv2.imshow("Thresh", thresh)
cv2.waitKey(0)
# 發現邊緣
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]
output = image.copy()
# loop over the contours
for c in cnts:
# draw each contour on the output image with a 3px thick purple
# outline, then display the output contours one at a time
cv2.drawContours(output, [c], -1, (240, 0, 159), 3)
cv2.imshow("Contours", output)
cv2.waitKey(0)
# draw the total number of contours found in purple
text = "I found {} objects!".format(len(cnts))
cv2.putText(output, text, (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7,
(240, 0, 159), 2)
cv2.imshow("Contours", output)
cv2.waitKey(0)
# we apply erosions to reduce the size of foreground objects
mask = thresh.copy()
mask = cv2.erode(mask, None, iterations=5)
cv2.imshow("Eroded", mask)
cv2.waitKey(0)
# 擴大
mask = thresh.copy()
mask = cv2.dilate(mask, None, iterations=5)
cv2.imshow("Dilated", mask)
cv2.waitKey(0)
# a typical operation we may want to apply is to take our mask and
# apply a bitwise AND to our input image, keeping only the masked
# regions
mask = thresh.copy()
output = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("Output", output)
cv2.waitKey(0)
原圖和灰度圖:
邊緣檢測
門限
輪廓
查詢結果
腐蝕和擴張
遮蔽和位操作
串在一起執行
$ python opencv_tutorial_02.py --image tetris_blocks.png
相關文章
- [雪峰磁針石部落格]計算機視覺opcencv工具深度學習快速實戰1人臉識別計算機視覺深度學習
- [雪峰磁針石部落格]Bokeh資料視覺化工具1快速入門視覺化
- [雪峰磁針石部落格]python計算機視覺深度學習1簡介Python計算機視覺深度學習
- [雪峰磁針石部落格]python計算機視覺深度學習2影像基礎Python計算機視覺深度學習
- [雪峰磁針石部落格]資料倉儲快速入門教程1簡介
- [雪峰磁針石部落格]資料分析工具pandas快速入門教程4-資料匯聚
- [雪峰磁針石部落格]tesseractOCR識別工具及pytesseract
- [雪峰磁針石部落格]multi-mechanize效能測試工具
- [雪峰磁針石部落格]python爬蟲cookbook1爬蟲入門Python爬蟲
- [雪峰磁針石部落格]2019-Python最佳資料科學工具庫Python資料科學
- [雪峰磁針石部落格]2018最佳ssh免費登陸工具
- [雪峰磁針石部落格]pythontkinter圖形工具樣式作業Python
- [雪峰磁針石部落格]python應用效能監控工具簡介Python
- [雪峰磁針石部落格]pythonGUI工具書籍下載-持續更新PythonNGUI
- [雪峰磁針石部落格]介面測試面試題面試題
- [雪峰磁針石部落格]python包管理工具:Conda和pip比較Python
- [雪峰磁針石部落格]2018最佳python編輯器和IDEPythonIDE
- [雪峰磁針石部落格]軟體自動化測試初學者忠告
- [雪峰磁針石部落格]可愛的python測試開發庫Python
- [雪峰磁針石部落格]大資料Hadoop工具python教程9-Luigi工作流大資料HadoopPythonUI
- 【深度學習】:一門入門3D計算機視覺深度學習3D計算機視覺
- [雪峰磁針石部落格]web開發工具flask中文英文書籍下載-持續更新WebFlask
- [雪峰磁針石部落格]軟體測試專家工具包1web測試Web
- [雪峰磁針石部落格]selenium自動化測試工具python筆試面試專案實戰5鍵盤操作Python筆試面試
- [雪峰磁針石部落格]使用jython進行dubbo介面及ngrinder效能測試
- [雪峰磁針石部落格]pythonGUI作業:tkinter控制元件改變背景色PythonNGUI控制元件
- [雪峰磁針石部落格]python標準模組介紹-string:文字常量和模板Python
- 計算機視覺實戰的深度學習實戰二:影像預處理計算機視覺深度學習
- [雪峰磁針石部落格]滲透測試簡介1滲透測試簡介
- [雪峰磁針石部落格]python庫介紹-argparse:命令列選項及引數解析Python命令列
- [雪峰磁針石部落格]flask構建自動化測試平臺1-helloFlask
- [雪峰磁針石部落格]flask構建自動化測試平臺3-模板Flask
- 快速入門——深度學習理論解析與實戰應用深度學習
- [雪峰磁針石部落格]python3.7極速入門教程1安裝:Linux(Ubuntu18.04)及Windows上安裝AnacondaPythonLinuxUbuntuWindows
- 計算機視覺與深度學習公司計算機視覺深度學習
- 計算機視覺中的深度學習計算機視覺深度學習
- [雪峰磁針石部落格]使用python3和flask構建RESTfulAPI(介面測試服務)PythonFlaskRESTAPI
- [雪峰磁針石部落格]python網路作業:使用python的socket庫實現ICMP協議的pingPython協議