中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

OpenCV中邊緣檢測(cè)的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹OpenCV中邊緣檢測(cè)的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司是網(wǎng)站建設(shè)專家,致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷,專業(yè)領(lǐng)域包括網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、電商網(wǎng)站制作開(kāi)發(fā)、重慶小程序開(kāi)發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開(kāi)發(fā),與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開(kāi)發(fā)公司不同,我們的整合解決方案結(jié)合了恒基網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷的理念,并將策略和執(zhí)行緊密結(jié)合,且不斷評(píng)估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網(wǎng)品牌整合方案!

邊緣在人類視覺(jué)和計(jì)算機(jī)視覺(jué)中均起著重要的作用。

人類能夠僅憑一張背景剪影或一個(gè)草圖就識(shí)別出物體類型和姿態(tài)。

其中OpenCV提供了許多邊緣檢測(cè)濾波函數(shù),這些濾波函數(shù)都會(huì)將非邊緣區(qū)域轉(zhuǎn)為黑色,將邊緣區(qū)域轉(zhuǎn)為白色或其他飽和的顏色。

不過(guò)這些濾波函數(shù)都很容易將噪聲錯(cuò)誤地識(shí)別為邊緣,所以需要進(jìn)行模糊處理。

本次的模糊操作使用高斯模糊(低通濾波器),最常用的模糊濾波器(平滑濾波器)之一,是一個(gè)削弱高頻信號(hào)強(qiáng)度的低通濾波器。

低通濾波器,在像素與周圍像素的亮度差值小于一個(gè)特定值時(shí),平滑該像素的亮度,主要用于去噪和模糊化。

邊緣檢測(cè)則是使用OpenCV的Canny函數(shù)實(shí)現(xiàn),算法雖然很復(fù)雜,但是代碼卻很簡(jiǎn)單。

5個(gè)步驟,使用高斯濾波器對(duì)圖像去噪、計(jì)算梯度、在邊緣上使用非大抑制(NMS)、在檢測(cè)到的邊緣上使用雙(double)閾值去除陽(yáng)性(false positive)、分析所有的邊緣及其連接,保留真正的邊緣并消除不明顯的邊緣。

下面就來(lái)實(shí)現(xiàn)一下「跳一跳」的邊緣檢測(cè),得以獲取方塊的中心位置。

/ 01 / 邊緣檢測(cè)

Canny邊緣檢測(cè)代碼如下。

import cv2
import numpy as np
# 讀取原圖像
img = cv2.imread('game.png', 0)
# 顯示原圖像
cv2.namedWindow('img', 0)
cv2.resizeWindow('img', 400, 600)
cv2.imshow('img', img)
# 高斯模糊
img_rgb = cv2.GaussianBlur(img, (5, 5), 0)
canny_img = cv2.Canny(img_rgb, 1, 10)
# 顯示邊緣檢測(cè)圖像
cv2.namedWindow('canny', 0)
cv2.resizeWindow('canny', 400, 600)
cv2.imshow('canny', canny_img)
# 輸出邊緣檢測(cè)圖像的高和寬
H, W = canny_img.shape
print(H, W)

輸出的圖像高寬分別為1920和1080。

下面是原圖像灰度圖和邊緣檢測(cè)圖像。

OpenCV中邊緣檢測(cè)的示例分析

接下來(lái),通過(guò)邊緣檢測(cè)圖像找到方塊的第一個(gè)頂點(diǎn)(上頂點(diǎn))。

# 第一個(gè)頂點(diǎn)的高度,row為列表(代表每一行的像素值),max(row)獲取列表中大的像素值
y_top = np.nonzero([max(row) for row in canny_img[400:]])[0][0] + 400

對(duì)圖像高度大于400的行進(jìn)行遍歷(這樣可以去除上方數(shù)字270以及小程序塊的影響)。

np.nonzero()表示獲取列表元素?cái)?shù)值不為0的位置,第一個(gè)即為上頂點(diǎn)的高度值。

OpenCV中邊緣檢測(cè)的示例分析

接下來(lái)獲取上頂點(diǎn)的寬度值。

# 第一個(gè)頂點(diǎn)的寬度
x_top = int(np.mean(np.nonzero(canny_img[y_top])))

這里發(fā)現(xiàn)有好幾個(gè)水平點(diǎn),所以最后取平均值。

接下來(lái)對(duì)方塊下頂點(diǎn)的位置進(jìn)行確定。

OpenCV中邊緣檢測(cè)的示例分析

為了跳過(guò)小白圈的影響,在上頂點(diǎn)高度的基礎(chǔ)上加上80個(gè)像素大小。

然后往下方遍歷,寬度值保持不變,直至找到像素值不為0的點(diǎn)。

便得到了方塊的下頂點(diǎn)坐標(biāo)。

# 跳過(guò)小白圈,然后遍歷
y_bottom = y_top + 80
for row in range(y_bottom, H):
  if canny_img[row, x_top] != 0:
    y_bottom = row
    break
# 得到方塊的中心點(diǎn)
x_center, y_center = x_top, (y_top + y_bottom) // 2
# 繪制以方塊中心點(diǎn)為圓心的圓
cv2.circle(canny_img, (x_center, y_center), 33, (255, 0, 255), 2)
# 顯示得到的圖像
cv2.namedWindow('result', 0)
cv2.resizeWindow('result', 400, 600)
cv2.imshow('result', canny_img)
# 結(jié)束
cv2.waitKey(0)
cv2.destroyAllWindows()

最后通過(guò)上下頂點(diǎn)的坐標(biāo),得到方塊的中心點(diǎn)。

OpenCV中邊緣檢測(cè)的示例分析

左圖為邊緣檢測(cè)原圖,右圖為找到方塊中心點(diǎn)并以中心點(diǎn)為圓心繪制圓形的圖像。

/ 02 / 跳動(dòng)實(shí)現(xiàn)

現(xiàn)在結(jié)合之前模板匹配獲得到的小跳棋位置,計(jì)算兩中心的距離。

勾三股四弦五,便能得到兩個(gè)中心的距離了。

看下圖,一目了然。

OpenCV中邊緣檢測(cè)的示例分析

玩過(guò)跳一跳的應(yīng)該都知道,對(duì)于不同的距離,我們需要按壓的時(shí)間是不同的。

所以可以給距離和按壓時(shí)間設(shè)置一個(gè)相關(guān)參數(shù),此處設(shè)置為1.35。

對(duì)于我的手機(jī)簡(jiǎn)直完美匹配(與屏幕大小有關(guān))。

最后通過(guò)adb命令完成一定的按壓時(shí)間,完成「跳一跳」自動(dòng)化。

以上是“OpenCV中邊緣檢測(cè)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章名稱:OpenCV中邊緣檢測(cè)的示例分析-創(chuàng)新互聯(lián)
URL地址:http://www.rwnh.cn/article6/iihig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、網(wǎng)站改版、動(dòng)態(tài)網(wǎng)站、網(wǎng)站排名、自適應(yīng)網(wǎng)站網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
平顺县| 仙游县| 陈巴尔虎旗| 阿拉善右旗| 海口市| 永福县| 宁陵县| 富蕴县| 盐亭县| 图们市| 石柱| 海淀区| 黑河市| 平凉市| 旅游| 静乐县| 湘潭县| 依安县| 南宁市| 麻城市| 江华| 岐山县| 凤城市| 泰州市| 香格里拉县| 栾城县| 古浪县| 涞源县| 仙游县| 新乡县| 天长市| 滕州市| 灵宝市| 虹口区| 永昌县| 新源县| 嵊州市| 诸暨市| 垦利县| 平泉县| 东明县|