国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

opencv-python 將圖像迷宮轉(zhuǎn)為迷宮數(shù)組

這篇具有很好參考價值的文章主要介紹了opencv-python 將圖像迷宮轉(zhuǎn)為迷宮數(shù)組。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

起因是我想做個自動走迷宮的外掛(其實是想做點實踐),所以我需要在游戲中捕捉畫面并自動尋路,然后再控制自動移動,此為第一部分:捕捉畫面。

一.思路

1.取得圖像迷宮

2.處理圖像

3.圖像分割

4.生成數(shù)組

二.代碼

首先我們得捕捉屏幕畫面,即獲得迷宮圖像,這里我是在steam上面找了一個迷宮小游戲作為捕捉對象

opencv-python 將圖像迷宮轉(zhuǎn)為迷宮數(shù)組

然后寫個捕捉屏幕畫面的函數(shù)

def VideoCapture():
    imm = ImageGrab.grab()  # 獲得當前屏幕
    imm = cv2.cvtColor(np.array(imm), cv2.COLOR_RGB2GRAY)  # 轉(zhuǎn)為opencv的灰度圖
    imm = imm[35:1040, 450:1470]  # 1080*1100 裁剪圖像,這是根據(jù)游戲畫面調(diào)整的數(shù)值 
    imm = cv2.resize(imm, (250, 250))  # 19 * 19 縮小圖像
    return imm

然后如果顯示圖像就能看到:

opencv-python 將圖像迷宮轉(zhuǎn)為迷宮數(shù)組

接著我們需要對圖像進行處理,我們可以看到這個迷宮有三個對象:從上到下依次是巢,心,球。而我們是要操控球吃完所有的心再返回巢。所以 巢和心的是需要搜索路徑的終點,球是起點,但是在此之前,我們需要一個完整的迷宮地圖,所以我們要先找到這三個對象并涂白:

所以我們要進行模板匹配:

def match(target, template, color):
    global object
    # 獲得模板圖片的高寬尺寸
    theight, twidth = template.shape[:2]
    # 執(zhí)行模板匹配,采用的匹配方式cv2.TM_SQDIFF_NORMED
    result = cv2.matchTemplate(target, template, cv2.TM_SQDIFF_NORMED)
    # 歸一化處理
    cv2.normalize(result, result, 0, 1, cv2.NORM_MINMAX, -1)
    # 尋找矩陣(一維數(shù)組當做向量,用Mat定義)中的最大值和最小值的匹配結(jié)果及其位置
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    # 匹配值轉(zhuǎn)換為字符串
    # 對于cv2.TM_SQDIFF及cv2.TM_SQDIFF_NORMED方法min_val越趨近與0匹配度越好,匹配位置取min_loc
    # 對于其他方法max_val越趨近于1匹配度越好,匹配位置取max_loc
    strmin_val = str(min_val)
    # 繪制矩形邊框,將匹配區(qū)域涂成白色
    # min_loc:矩形定點
    # (min_loc[0]+twidth,min_loc[1]+theight):矩形的寬高
    # color:矩形的邊框顏色;2:矩形邊框?qū)挾?/span>
    cv2.rectangle(target, min_loc, (min_loc[0] + twidth, min_loc[1] + theight), color, -1)
    # 返回操作后圖像,以及對象的四點坐標
    return [target, (int(min_loc[0]), int(min_loc[1]), int(min_loc[0] + twidth), int(min_loc[1] + theight))]

執(zhí)行后效果如圖所示:

opencv-python 將圖像迷宮轉(zhuǎn)為迷宮數(shù)組

然后我們要把圖像轉(zhuǎn)化為標準的迷宮圖像,黑白塊的大小要相等,這樣才方便轉(zhuǎn)化成數(shù)組形式,所以我們對圖像進行二值化后白色為可走趨于,黑色為障礙,接著通過腐蝕操作增大黑色趨于使之與白色塊大小接近。

def pic(imm):
    ret, binary = cv2.threshold(imm, 200, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)# 二值化
    k = np.ones((7, 7), np.uint8)#定義核
    binary = cv2.erode(binary, k)# 腐蝕
    return binary

opencv-python 將圖像迷宮轉(zhuǎn)為迷宮數(shù)組

然后大致數(shù)出可以劃分為19*19的色塊,計算出單個色塊的長度,然后定義每個色塊的近中心點(因為坐標只能整數(shù)而計算中心點會有小數(shù),一般略微靠近左上角比較準確),取其近中心點的顏色為整個色塊的顏色轉(zhuǎn)化為數(shù)組中:

def getBoard(imm):
    board = [[0 for w in range(19)] for h in range(19)]#創(chuàng)建數(shù)組
    for h in range(19):
        for w in range(19):
            if imm[13 * h + 5, 13 * w + 5] == np.uint8(255):#坐標轉(zhuǎn)換
                board[h][w] = 255
    return board

然后我們把得到的數(shù)組以圖像的形式打印出來看看:

opencv-python 將圖像迷宮轉(zhuǎn)為迷宮數(shù)組

對比一下原圖像,已經(jīng)實現(xiàn)了我們的目的。

最后我們再把其他信息獲取一下,比如對象位置轉(zhuǎn)化為數(shù)組坐標:

def getBoardIndex(cor):
    index = (int((cor[1] - 5) / 13), int((cor[0] - 5) / 13))
    return index

然后我們也方便日后的尋路算法應(yīng)用(這么小,很快?。?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-465251.html

最后的最后給個運行代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-465251.html

startFlag = False
while True:
    imm = VideoCapture()
    if startFlag:
        imm, ball = match(imm, cv2.imread("ball.png", 0), (255, 255, 255))
        imm, home = match(imm, cv2.imread("home.png", 0), (255, 255, 255))
        imm, heart = match(imm, cv2.imread("heart.png", 0), (255, 255, 255))
        imm = pic(imm)
        board = getBoard(imm)
        cv2.imwrite("board.png", np.array(board, dtype=np.uint8))
        ball = getBoardIndex(getPointCor(ball))
        heart = getBoardIndex(getPointCor(heart))
        home = getBoardIndex(getPointCor(home))
        print(ball, heart, home)
    key = cv2.waitKey(1)
    if key == ord('q'):
        break
    elif key == ord('g'):
        startFlag = True
    cv2.imshow("im", imm)
 key = cv2.waitKey(1)
    if key == ord('q'):
        break
    elif key == ord('g'):
        startFlag = True
    cv2.imshow("im", imm)

到了這里,關(guān)于opencv-python 將圖像迷宮轉(zhuǎn)為迷宮數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • OpenCV-Python中的圖像處理-圖像直方圖

    OpenCV-Python中的圖像處理-圖像直方圖

    通過直方圖你可以對整幅圖像的灰度分布有一個整體的了解。直方圖的 x 軸是灰度值( 0 到 255), y 軸是圖片中具有同一個灰度的點的數(shù)目。 BINS:上面的直方圖顯示了每個灰度值對應(yīng)的像素數(shù)。如果像素值為 0到255,你就需要 256 個數(shù)來顯示上面的直方圖。但是,如果你不需

    2024年02月12日
    瀏覽(24)
  • OpenCV-Python中的圖像處理-視頻分析

    OpenCV-Python中的圖像處理-視頻分析

    學習使用 Meanshift 和 Camshift 算法在視頻中找到并跟蹤目標對象: Meanshift 算法的基本原理是和很簡單的。假設(shè)我們有一堆點(比如直方 圖反向投影得到的點),和一個小的圓形窗口,我們要完成的任務(wù)就是將這個窗 口移動到最大灰度密度處(或者是點最多的地方)。如下圖所

    2024年02月12日
    瀏覽(24)
  • OpenCV-Python中的圖像處理-模板匹配

    OpenCV-Python中的圖像處理-模板匹配

    使用模板匹配可以在一幅圖像中查找目標 函數(shù): cv2.matchTemplate(), cv2.minMaxLoc() 模板匹配是用來在一副大圖中搜尋查找模版圖像位置的方法。 OpenCV 為我們提供了函數(shù): cv2.matchTemplate()。和 2D 卷積一樣,它也是用模板圖像在輸入圖像(大圖)上滑動,并在每一個位置對模板圖像

    2024年02月12日
    瀏覽(23)
  • OpenCV-Python中的圖像處理-霍夫變換

    OpenCV-Python中的圖像處理-霍夫變換

    霍夫(Hough)變換在檢測各種形狀的技術(shù)中非常流行,如果要檢測的形狀可以用數(shù)學表達式描述,就可以是使用霍夫變換檢測它。即使要檢測的形狀存在一點破壞或者扭曲也是可以使用。 Hough直線變換,可以檢測一張圖像中的直線 cv2.HoughLines(image, rho, theta, threshold) return:返回值

    2024年02月12日
    瀏覽(31)
  • opencv-python[cv2]讀取中文路徑圖像

    opencv-python[cv2]讀取中文路徑圖像

    隨著AI人工智能的不斷發(fā)展,圖像處理這門技術(shù)也越來越重要,很多學校本科都開啟了圖像處理這門課程,學習圖像處理開發(fā),自然就繞不開opencv-python[ cv2 ]這個由intel主導的開源庫。 cv2 是指OpenCV的Python接口庫。 OpenCV (Open Source Computer Vision Library)是一個開源的計算機視覺庫

    2024年02月06日
    瀏覽(41)
  • 基于OpenCV-Python的圖像位置校正和版面分析

    基于OpenCV-Python的圖像位置校正和版面分析

    使用opencv對圖像進行操作,要求:(1)定位銀行票據(jù)的四條邊,然后旋正。(2)根據(jù)版面分析,分割出小寫金額區(qū)域。 首先是對圖像的校正 讀取圖片 對圖片二值化 進行邊緣檢測 對邊緣的進行霍夫曼變換 將變換結(jié)果從極坐標空間投影到笛卡爾坐標得到傾斜角 根據(jù)傾斜角對

    2024年01月19日
    瀏覽(42)
  • OpenCV-Python中的圖像處理-傅里葉變換

    OpenCV-Python中的圖像處理-傅里葉變換

    傅里葉變換經(jīng)常被用來分析不同濾波器的頻率特性。我們可以使用 2D 離散傅里葉變換 (DFT) 分析圖像的頻域特性。實現(xiàn) DFT 的一個快速算法被稱為快速傅里葉變換( FFT)。 對于一個正弦信號:x (t) = A sin (2πft), 它的頻率為 f,如果把這個信號轉(zhuǎn)到它的頻域表示,我們會在頻率

    2024年02月12日
    瀏覽(24)
  • OpenCV-Python學習(21)—— OpenCV 圖像幾何變換之圖像翻轉(zhuǎn)(cv.flip、np.flip)

    OpenCV-Python學習(21)—— OpenCV 圖像幾何變換之圖像翻轉(zhuǎn)(cv.flip、np.flip)

    1. 學習目標 學習 OpenCV 圖像的翻轉(zhuǎn)函數(shù) cv.flip; 學習 NumPy 矩陣的反轉(zhuǎn)函數(shù) np.flip; 自己實現(xiàn)矩陣反轉(zhuǎn)的函數(shù)。 2. OpenCV 翻轉(zhuǎn) 翻轉(zhuǎn)也稱鏡像,是指將圖像沿軸線進行軸對稱變換。水平鏡像是將圖像沿垂直中軸線進行左右翻轉(zhuǎn),垂直鏡像是將圖像沿水平中軸線進行上下翻轉(zhuǎn),水平

    2024年02月06日
    瀏覽(84)
  • OpenCV-Python學習(10)—— OpenCV 圖像二值化處理(cv.threshold)

    OpenCV-Python學習(10)—— OpenCV 圖像二值化處理(cv.threshold)

    1. 學習目標 理解圖像的分類,不同類型的圖像的區(qū)別; 對圖像進行二值化處理,對【 cv.threshold 】函數(shù)的理解。 2. 圖像分類 2.1 不同類型圖像說明 按照顏色對圖像進行分類,可以分為二值圖像、灰度圖像和彩色圖像。 二值圖像: 只有黑色和白色兩種顏色的圖像。 每個像素

    2024年02月03日
    瀏覽(103)
  • 【OpenCV-Python】教程:8-1 圖像去噪 Image Denoising

    【OpenCV-Python】教程:8-1 圖像去噪 Image Denoising

    非局部均值去噪算法去除圖像中的噪聲。 cv2.fastNlMeansDenoising() , cv2.fastNlMeansDenoisingColored() etc. 在前面的章節(jié)中,我們已經(jīng)看到了許多圖像平滑技術(shù),如 高斯模糊,中值模糊 等,它們在一定程度上很好地去除少量的噪聲。在這些技術(shù)中,我們在像素周圍取一個小的鄰域,并進

    2024年02月11日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包