image vb6 图片自适应_Python人工智能使用OpenCV进行图片形状的中心检测
我們都知道正方形(長方形)的中心是2條對角線的交點,圓的中心是一個圓的圓心,如何在對象檢測以及圖片檢測與識別領域,判斷一個形狀的中心,便是計算機視覺領域中的一個基礎檢測
中心檢測
Opencv+python 實現物體形狀的質心檢測
OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫。OpenCV的建立是為了給計算機視覺應用提供一個通用的基礎設施,并加速機器感知在商業產品中的應用。作為BSD授權的產品,OpenCV使企業很容易利用和修改代碼。
它擁有C++、Python、Java和MATLAB接口,支持Windows、Linux、Android和Mac OS。OpenCV主要傾向于實時視覺應用,并在可用時利用MMX和SSE指令。目前正在積極開發全功能的CUDAand OpenCL接口。有超過500種算法和大約10倍的函數組成或支持這些算法。OpenCV是用C++原生編寫的,有一個模板化的接口,可以與STL容器無縫對接。
Opencv在計算機視覺領域的發揮了很大的作用,大部分的計算機視覺領域的相關應用都可以使用OpenCV來實現,當然很多神經網絡訓練的模型庫,OpenCV也可以進行模型的調用,很大程度上方便了用戶的使用
中心檢測
import cv2import numpy as npimg = cv2.imread('13.jpg')gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret,thresh = cv2.threshold(gray_image,127,255,0)M = cv2.moments(thresh)cX = int(M["m10"] / M["m00"])cY = int(M["m01"] / M["m00"])cv2.circle(img, (cX, cY), 5, (255, 255, 255), -1)cv2.putText(img, "centroid", (cX - 25, cY - 25),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)cv2.imshow("Image", img)cv2.waitKey(0)代碼截圖
首先讀入一張我們需要尋找質心的圖片,并轉換到灰度空間,然后使用OpenCV二值化函數進行處理
opencv二值化的cv2.threshold簡單閾值函數
簡單閾值當然是最簡單,選取一個全局閾值,然后就把整幅圖像分成了非黑即白的二值圖像了。
函數為cv2.threshold():
這個函數有四個參數:第一個原圖像第二個進行分類的閾值第三個是高于(低于)閾值時賦予的新值第四個是一個方法選擇參數,常用的有:? cv2.THRESH_BINARY(黑白二值)? cv2.THRESH_BINARY_INV(黑白二值反轉)? cv2.THRESH_TRUNC (得到的圖像為多像素值)? cv2.THRESH_TOZERO? cv2.THRESH_TOZERO_INV該函數有兩個返回值,第一個retVal(得到的閾值值)第二個就是閾值化后的圖像。當然OpenCV除了簡單的二值化函數外,還提供了自適應閾值函數
自適應閾值可以看成一種局部性的閾值,通過規定一個區域大小,比較這個點與區域大小里面像素點的平均值(或者其他特征)的大小關系確定這個像素點是屬于黑或者白(如果是二值情況)。使用的函數為:cv2.adaptiveThreshold()該函數需要填6個參數:
· 第一個原始圖像· 第二個像素值上限· 第三個自適應方法Adaptive Method:— cv2.ADAPTIVE_THRESH_MEAN_C :領域內均值—cv2.ADAPTIVE_THRESH_GAUSSIAN_C :領域內像素點加權和,權 重為一個高斯窗口· 第四個值的賦值方法:只有cv2.THRESH_BINARY 和cv2.THRESH_BINARY_INV· 第五個Block size:規定領域大小(一個正方形的領域)· 第六個常數C,閾值等于均值或者加權值減去這個常數(為0相當于閾值 就是求得領域內均值或者加權值)這種方法理論上得到的效果更好,相當于在動態自適應的調整屬于自己像素點的閾值,而不是整幅圖像都用一個閾值。使用中心距函數進行圖片的中心檢測
opencv中提供了moments()來計算圖像中的中心矩(最高到三階),HuMoments()用于由中心矩計算Hu矩.同時配合函數contourArea函數計算輪廓面積和arcLength來計算輪廓或曲線長度moments()cv::moments ( InputArray array,bool binaryImage = false)array:輸入數組,可以是光柵圖像(單通道,8-bit或浮點型二維數組), 或者是一個二維數組(1 X N或N X 1),二維數組類型為Point或Point2fbinaryImage:默認值是false,如果為true,則所有非零的像素都會按值1對待,也就是說相當于對圖像進行了二值化處理,閾值為1,此參數僅對圖像有效。通過以上步驟,便可以成功檢測到圖片的中心了
Opencv+python 實現多物體形狀的質心檢測
絕大多數的時候,我們的圖片中包含了不僅一種形狀的物品,如何同時檢測多個物品的中心?
多形狀質心檢測
import cv2import numpy as npimg = cv2.imread('11.png')gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret,thresh = cv2.threshold(gray_image,127,255,0)contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)for c in contours:M = cv2.moments(c)cX = int(M["m10"] / M["m00"])cY = int(M["m01"] / M["m00"])cv2.circle(img, (cX, cY), 5, (255, 255, 255), -1)cv2.putText(img, "centroid", (cX - 25, cY - 25),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)cv2.imshow("Image", img)cv2.waitKey(0)代碼截圖
跟單一圖形檢測中心對比,多圖形檢測中心增加了cv2.findContours函數
cv2.findContours()函數
cv2.findContours(image,?mode,?method[,?contours[,?hierarchy[,?offset?]]])??opencv2返回兩個值:contours:hierarchy。
opencv3會返回三個值,分別是img, countours, hierarchy
參數:
第一個參數是尋找輪廓的圖像;
第二個參數表示輪廓的檢索模式,有四種(本文介紹的都是新的cv2接口): cv2.RETR_EXTERNAL表示只檢測外輪廓 cv2.RETR_LIST檢測的輪廓不建立等級關系 cv2.RETR_CCOMP建立兩個等級的輪廓,上面的一層為外邊界,里面的一層為內孔的邊界信息。如果內孔內還有一個連通物體,這個物體的邊界也在頂層。 cv2.RETR_TREE建立一個等級樹結構的輪廓。
第三個參數method為輪廓的近似辦法 cv2.CHAIN_APPROX_NONE存儲所有的輪廓點,相鄰的兩個點的像素位置差不超過1,即max(abs(x1-x2),abs(y2-y1))==1 cv2.CHAIN_APPROX_SIMPLE壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點坐標,例如一個矩形輪廓只需4個點來保存輪廓信息 cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似
返回值
cv2.findContours()函數返回兩個值,一個是輪廓本身,還有一個是每條輪廓對應的屬性。
contour返回值
cv2.findContours()函數首先返回一個list,list中每個元素都是圖像中的一個輪廓,用numpy中的ndarray表示。
通過cv2.findContours函數便可以成功找到圖形的外輪廓,如下圖
多形狀輪廓檢測
外輪廓檢測完成后,可以使用cv2.drawContours函數對圖片的輪廓進行標注出來
cv2.drawContours(img,contours,-1,(0,0,255),3)
cv2.drawContours()函數
1. cv2.drawContours(image,?contours,?contourIdx,?color [,?thickness[,?lineType[,?hierarchy[,?maxLevel[,?offset?]]]]])??· 第一個參數是指明在哪幅圖像上繪制輪廓;· 第二個參數是輪廓本身,在Python中是一個list。· 第三個參數指定繪制輪廓list中的哪條輪廓,如果是-1,則繪制其中的所有輪廓。后面的參數很簡單。其中thickness表明輪廓線的寬度,如果是-1(cv2.FILLED),則為填充模式當檢測到多個輪廓后,便可以遍歷多個輪廓,對每個圖形進行質心的檢測通過以上的步驟,便可以檢測到形狀的外輪廓,并找到圖片的中心,這些技術在工業視覺領域應用比較多,我們專欄中《打造屬于自己的天眼目標檢測追蹤系統》中也用類似的介紹,哪里我們介紹了人臉的質心檢測與 人臉質心的目標追蹤
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的image vb6 图片自适应_Python人工智能使用OpenCV进行图片形状的中心检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python高斯函数表达式_Python
- 下一篇: python中callable什么意思_