欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV 邊緣檢測

 更新時間:2019年07月10日 10:53:17   作者:法納斯特  
OpenCV提供了許多邊緣檢測濾波函數(shù),這些濾波函數(shù)都會將非邊緣區(qū)域轉(zhuǎn)為黑色,將邊緣區(qū)域轉(zhuǎn)為白色或其他飽和的顏色。這篇文章主要介紹了OpenCV 邊緣檢測,需要的朋友可以參考下

邊緣在人類視覺和計算機視覺中均起著重要的作用。

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

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

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

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

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

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

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

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

/ 01 / 邊緣檢測

Canny邊緣檢測代碼如下。

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)
# 顯示邊緣檢測圖像
cv2.namedWindow('canny', 0)
cv2.resizeWindow('canny', 400, 600)
cv2.imshow('canny', canny_img)
# 輸出邊緣檢測圖像的高和寬
H, W = canny_img.shape
print(H, W)

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

下面是原圖像灰度圖和邊緣檢測圖像。

接下來,通過邊緣檢測圖像找到方塊的第一個頂點(上頂點)。

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

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

np.nonzero()表示獲取列表元素數(shù)值不為0的位置,第一個即為上頂點的高度值。

接下來獲取上頂點的寬度值。

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

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

接下來對方塊下頂點的位置進(jìn)行確定。

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

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

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

# 跳過小白圈,然后遍歷
y_bottom = y_top + 80
for row in range(y_bottom, H):
  if canny_img[row, x_top] != 0:
    y_bottom = row
    break
# 得到方塊的中心點
x_center, y_center = x_top, (y_top + y_bottom) // 2
# 繪制以方塊中心點為圓心的圓
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()

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

左圖為邊緣檢測原圖,右圖為找到方塊中心點并以中心點為圓心繪制圓形的圖像。

/ 02 / 跳動實現(xiàn)

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

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

看下圖,一目了然。

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

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

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

最后通過adb命令完成一定的按壓時間,完成「跳一跳」自動化。

總結(jié)

以上所述是小編給大家介紹的OpenCV 邊緣檢測,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會

及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Python基礎(chǔ)之函數(shù)原理與應(yīng)用實例詳解

    Python基礎(chǔ)之函數(shù)原理與應(yīng)用實例詳解

    這篇文章主要介紹了Python基礎(chǔ)之函數(shù)原理與應(yīng)用,結(jié)合具體實例形式詳細(xì)分析了Python函數(shù)的定義、原理、參數(shù)、返回值、嵌套等相關(guān)概念與使用技巧,需要的朋友可以參考下
    2020-01-01
  • 一文了解python 3 字符串格式化 F-string 用法

    一文了解python 3 字符串格式化 F-string 用法

    本文介紹在python 3 編程中,如何進(jìn)行字符串格式化。介紹了F-string的用法,通過實例代碼給大家介紹的非常詳細(xì),對大家的工作或?qū)W習(xí)具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-03-03
  • python 對多個csv文件分別進(jìn)行處理的方法

    python 對多個csv文件分別進(jìn)行處理的方法

    今天小編就為大家分享一篇python 對多個csv文件分別進(jìn)行處理的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 利用Python和OpenCV庫將URL轉(zhuǎn)換為OpenCV格式的方法

    利用Python和OpenCV庫將URL轉(zhuǎn)換為OpenCV格式的方法

    這篇文章主要介紹了利用Python和OpenCV庫將URL轉(zhuǎn)換為OpenCV格式的方法,同時用到了NumPy和urllib,需要的朋友可以參考下
    2015-03-03
  • Python Pycharm虛擬下百度飛漿PaddleX安裝報錯問題及處理方法(親測100%有效)

    Python Pycharm虛擬下百度飛漿PaddleX安裝報錯問題及處理方法(親測100%有效)

    最近很多朋友給小編留言在安裝PaddleX的時候總是出現(xiàn)各種奇葩問題,不知道該怎么處理,今天小編通過本文給大家介紹下Python Pycharm虛擬下百度飛漿PaddleX安裝報錯問題及處理方法,真的有效,遇到同樣問題的朋友快來參考下吧
    2021-05-05
  • Python網(wǎng)絡(luò)請求模塊urllib與requests使用介紹

    Python網(wǎng)絡(luò)請求模塊urllib與requests使用介紹

    網(wǎng)絡(luò)爬蟲的第一步就是根據(jù)URL,獲取網(wǎng)頁的HTML信息。在Python3中,可以使用urllib和requests進(jìn)行網(wǎng)頁數(shù)據(jù)獲取,這篇文章主要介紹了Python網(wǎng)絡(luò)請求模塊urllib與requests使用
    2022-10-10
  • 基于Python制作打地鼠小游戲

    基于Python制作打地鼠小游戲

    這篇文章主要為大家介紹了如何利用Python實現(xiàn)打地鼠小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • python對ip地址進(jìn)行排序、分類的方法詳解

    python對ip地址進(jìn)行排序、分類的方法詳解

    這篇文章主要介紹了python對ip地址進(jìn)行排序、分類的方法詳解,IP協(xié)議全稱為“網(wǎng)際互連協(xié)議Internet?Protocol”,IP協(xié)議是TCP/IP體系中的網(wǎng)絡(luò)層協(xié)議,需要的朋友可以參考下
    2023-07-07
  • python跨文件使用全局變量的實現(xiàn)

    python跨文件使用全局變量的實現(xiàn)

    本文主要介紹了python跨文件使用全局變量的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python中時間類型的JSON數(shù)據(jù)轉(zhuǎn)換

    Python中時間類型的JSON數(shù)據(jù)轉(zhuǎn)換

    在Python中,處理時間和日期數(shù)據(jù)以及與JSON數(shù)據(jù)的相互轉(zhuǎn)換是常見的任務(wù),本文主要為大家詳細(xì)如何在Python中處理時間類型的JSON數(shù)據(jù)轉(zhuǎn)換,需要的小伙伴可以參考下
    2024-02-02

最新評論