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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2024/10/14 python 112 豆豆
生活随笔 收集整理的這篇文章主要介紹了 image vb6 图片自适应_Python人工智能使用OpenCV进行图片形状的中心检测 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們都知道正方形(長方形)的中心是2條對(duì)角線的交點(diǎn),圓的中心是一個(gè)圓的圓心,如何在對(duì)象檢測(cè)以及圖片檢測(cè)與識(shí)別領(lǐng)域,判斷一個(gè)形狀的中心,便是計(jì)算機(jī)視覺領(lǐng)域中的一個(gè)基礎(chǔ)檢測(cè)

中心檢測(cè)

Opencv+python 實(shí)現(xiàn)物體形狀的質(zhì)心檢測(cè)

OpenCV(Open Source Computer Vision Library)是一個(gè)開源的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫。OpenCV的建立是為了給計(jì)算機(jī)視覺應(yīng)用提供一個(gè)通用的基礎(chǔ)設(shè)施,并加速機(jī)器感知在商業(yè)產(chǎn)品中的應(yīng)用。作為BSD授權(quán)的產(chǎn)品,OpenCV使企業(yè)很容易利用和修改代碼。

它擁有C++、Python、Java和MATLAB接口,支持Windows、Linux、Android和Mac OS。OpenCV主要傾向于實(shí)時(shí)視覺應(yīng)用,并在可用時(shí)利用MMX和SSE指令。目前正在積極開發(fā)全功能的CUDAand OpenCL接口。有超過500種算法和大約10倍的函數(shù)組成或支持這些算法。OpenCV是用C++原生編寫的,有一個(gè)模板化的接口,可以與STL容器無縫對(duì)接。

Opencv在計(jì)算機(jī)視覺領(lǐng)域的發(fā)揮了很大的作用,大部分的計(jì)算機(jī)視覺領(lǐng)域的相關(guān)應(yīng)用都可以使用OpenCV來實(shí)現(xiàn),當(dāng)然很多神經(jīng)網(wǎng)絡(luò)訓(xùn)練的模型庫,OpenCV也可以進(jìn)行模型的調(diào)用,很大程度上方便了用戶的使用

中心檢測(cè)

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)

代碼截圖

首先讀入一張我們需要尋找質(zhì)心的圖片,并轉(zhuǎn)換到灰度空間,然后使用OpenCV二值化函數(shù)進(jìn)行處理

opencv二值化的cv2.threshold簡單閾值函數(shù)

簡單閾值當(dāng)然是最簡單,選取一個(gè)全局閾值,然后就把整幅圖像分成了非黑即白的二值圖像了。

函數(shù)為cv2.threshold():

這個(gè)函數(shù)有四個(gè)參數(shù):第一個(gè)原圖像第二個(gè)進(jìn)行分類的閾值第三個(gè)是高于(低于)閾值時(shí)賦予的新值第四個(gè)是一個(gè)方法選擇參數(shù),常用的有:? cv2.THRESH_BINARY(黑白二值)? cv2.THRESH_BINARY_INV(黑白二值反轉(zhuǎn))? cv2.THRESH_TRUNC (得到的圖像為多像素值)? cv2.THRESH_TOZERO? cv2.THRESH_TOZERO_INV該函數(shù)有兩個(gè)返回值,第一個(gè)retVal(得到的閾值值)第二個(gè)就是閾值化后的圖像。

當(dāng)然OpenCV除了簡單的二值化函數(shù)外,還提供了自適應(yīng)閾值函數(shù)

自適應(yīng)閾值可以看成一種局部性的閾值,通過規(guī)定一個(gè)區(qū)域大小,比較這個(gè)點(diǎn)與區(qū)域大小里面像素點(diǎn)的平均值(或者其他特征)的大小關(guān)系確定這個(gè)像素點(diǎn)是屬于黑或者白(如果是二值情況)。使用的函數(shù)為:cv2.adaptiveThreshold()該函數(shù)需要填6個(gè)參數(shù):

· 第一個(gè)原始圖像· 第二個(gè)像素值上限· 第三個(gè)自適應(yīng)方法Adaptive Method:— cv2.ADAPTIVE_THRESH_MEAN_C :領(lǐng)域內(nèi)均值—cv2.ADAPTIVE_THRESH_GAUSSIAN_C :領(lǐng)域內(nèi)像素點(diǎn)加權(quán)和,權(quán) 重為一個(gè)高斯窗口· 第四個(gè)值的賦值方法:只有cv2.THRESH_BINARY 和cv2.THRESH_BINARY_INV· 第五個(gè)Block size:規(guī)定領(lǐng)域大小(一個(gè)正方形的領(lǐng)域)· 第六個(gè)常數(shù)C,閾值等于均值或者加權(quán)值減去這個(gè)常數(shù)(為0相當(dāng)于閾值 就是求得領(lǐng)域內(nèi)均值或者加權(quán)值)這種方法理論上得到的效果更好,相當(dāng)于在動(dòng)態(tài)自適應(yīng)的調(diào)整屬于自己像素點(diǎn)的閾值,而不是整幅圖像都用一個(gè)閾值。

使用中心距函數(shù)進(jìn)行圖片的中心檢測(cè)

opencv中提供了moments()來計(jì)算圖像中的中心矩(最高到三階),HuMoments()用于由中心矩計(jì)算Hu矩.同時(shí)配合函數(shù)contourArea函數(shù)計(jì)算輪廓面積和arcLength來計(jì)算輪廓或曲線長度moments()cv::moments ( InputArray array,bool binaryImage = false)array:輸入數(shù)組,可以是光柵圖像(單通道,8-bit或浮點(diǎn)型二維數(shù)組), 或者是一個(gè)二維數(shù)組(1 X N或N X 1),二維數(shù)組類型為Point或Point2fbinaryImage:默認(rèn)值是false,如果為true,則所有非零的像素都會(huì)按值1對(duì)待,也就是說相當(dāng)于對(duì)圖像進(jìn)行了二值化處理,閾值為1,此參數(shù)僅對(duì)圖像有效。

通過以上步驟,便可以成功檢測(cè)到圖片的中心了

Opencv+python 實(shí)現(xiàn)多物體形狀的質(zhì)心檢測(cè)

絕大多數(shù)的時(shí)候,我們的圖片中包含了不僅一種形狀的物品,如何同時(shí)檢測(cè)多個(gè)物品的中心?

多形狀質(zhì)心檢測(cè)

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)

代碼截圖

跟單一圖形檢測(cè)中心對(duì)比,多圖形檢測(cè)中心增加了cv2.findContours函數(shù)

cv2.findContours()函數(shù)

cv2.findContours(image,?mode,?method[,?contours[,?hierarchy[,?offset?]]])??

opencv2返回兩個(gè)值:contours:hierarchy。

opencv3會(huì)返回三個(gè)值,分別是img, countours, hierarchy

參數(shù):

第一個(gè)參數(shù)是尋找輪廓的圖像;

第二個(gè)參數(shù)表示輪廓的檢索模式,有四種(本文介紹的都是新的cv2接口): cv2.RETR_EXTERNAL表示只檢測(cè)外輪廓 cv2.RETR_LIST檢測(cè)的輪廓不建立等級(jí)關(guān)系 cv2.RETR_CCOMP建立兩個(gè)等級(jí)的輪廓,上面的一層為外邊界,里面的一層為內(nèi)孔的邊界信息。如果內(nèi)孔內(nèi)還有一個(gè)連通物體,這個(gè)物體的邊界也在頂層。 cv2.RETR_TREE建立一個(gè)等級(jí)樹結(jié)構(gòu)的輪廓。

第三個(gè)參數(shù)method為輪廓的近似辦法 cv2.CHAIN_APPROX_NONE存儲(chǔ)所有的輪廓點(diǎn),相鄰的兩個(gè)點(diǎn)的像素位置差不超過1,即max(abs(x1-x2),abs(y2-y1))==1 cv2.CHAIN_APPROX_SIMPLE壓縮水平方向,垂直方向,對(duì)角線方向的元素,只保留該方向的終點(diǎn)坐標(biāo),例如一個(gè)矩形輪廓只需4個(gè)點(diǎn)來保存輪廓信息 cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似

返回值

cv2.findContours()函數(shù)返回兩個(gè)值,一個(gè)是輪廓本身,還有一個(gè)是每條輪廓對(duì)應(yīng)的屬性。

contour返回值

cv2.findContours()函數(shù)首先返回一個(gè)list,list中每個(gè)元素都是圖像中的一個(gè)輪廓,用numpy中的ndarray表示。

通過cv2.findContours函數(shù)便可以成功找到圖形的外輪廓,如下圖

多形狀輪廓檢測(cè)

外輪廓檢測(cè)完成后,可以使用cv2.drawContours函數(shù)對(duì)圖片的輪廓進(jìn)行標(biāo)注出來

cv2.drawContours(img,contours,-1,(0,0,255),3)

cv2.drawContours()函數(shù)

1. cv2.drawContours(image,?contours,?contourIdx,?color [,?thickness[,?lineType[,?hierarchy[,?maxLevel[,?offset?]]]]])??· 第一個(gè)參數(shù)是指明在哪幅圖像上繪制輪廓;· 第二個(gè)參數(shù)是輪廓本身,在Python中是一個(gè)list。· 第三個(gè)參數(shù)指定繪制輪廓list中的哪條輪廓,如果是-1,則繪制其中的所有輪廓。后面的參數(shù)很簡單。其中thickness表明輪廓線的寬度,如果是-1(cv2.FILLED),則為填充模式當(dāng)檢測(cè)到多個(gè)輪廓后,便可以遍歷多個(gè)輪廓,對(duì)每個(gè)圖形進(jìn)行質(zhì)心的檢測(cè)

通過以上的步驟,便可以檢測(cè)到形狀的外輪廓,并找到圖片的中心,這些技術(shù)在工業(yè)視覺領(lǐng)域應(yīng)用比較多,我們專欄中《打造屬于自己的天眼目標(biāo)檢測(cè)追蹤系統(tǒng)》中也用類似的介紹,哪里我們介紹了人臉的質(zhì)心檢測(cè)與 人臉質(zhì)心的目標(biāo)追蹤

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的image vb6 图片自适应_Python人工智能使用OpenCV进行图片形状的中心检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。