日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

image vb6 图片自适应_Python人工智能使用OpenCV进行图片形状的中心检测

發布時間:2024/10/14 python 103 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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进行图片形状的中心检测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。