最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+OpenCV實現(xiàn)基于顏色的目標識別

 更新時間:2022年01月04日 17:07:12   作者:a_growing_tree  
這篇文章主要介紹了利用OpenCV實現(xiàn)基于顏色的目標識別,即讓攝像頭識別到視野范圍內(nèi)的有顏色的氣球并返回每個氣球的中心點坐標,感興趣的可以跟隨小編學習一下

學習了一點opencv的知識于是找了個小項目來實踐一下。這里先說明一下,我的實現(xiàn)方法不見得是最好的(因為這只是一個用于練習的項目)僅作參考,也歡迎各位大佬指正。

任務

讓攝像頭識別到視野范圍內(nèi)的氣球并返回每個氣球的中心點坐標。

因為場地固定,背景單一,所以省下來很多操作和處理。于是就有兩種解決思路:第一種是基于氣球形狀做輪廓提取,只要是閉合橢圓或圓形形就認為是目標物體;第二種是基于氣球顏色,只要符合目標物體的顏色就認為是目標物體。

因為攝像頭是裝在四足機器人(它的任務是去扎氣球)身上的,所以它如果移動到攝像頭視野范圍內(nèi)氣球不成閉合橢圓或圓形的時候就無法識別了,再加上場地燈光而產(chǎn)生的陰影的問題,在初步實踐中發(fā)現(xiàn)經(jīng)過圖像處理的氣球不一定是閉合球形的。所以這種方法被我否決了。

于是我就采用了第二種方法,實現(xiàn)思路大概如下:

首先對圖像進行形態(tài)學處理,具體為將讀入的灰度圖進行一次濾波操作,將圖像轉化成HSV圖,然后進行腐蝕操作。接著就對目標顏色進行識別和提取。然后提取圖像的輪廓,過濾掉輪廓圍成面積較小的物體后將剩余物體視為目標。接下來就繪制目標的外接矩形(不必要,用于調試。當然也為了帥氣的視覺效果)。最后計算目標的中心點,返回中心點,并繪制在圖上。

話不多說我們來看一下具體的代碼實現(xiàn)吧

主要代碼

import cv2
#import matplotlib.pyplot as plt
import numpy as np

#定義一個展示圖片的函數(shù)
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

#定義一個形態(tài)學處理的函數(shù)
def good_thresh_img(img):
    gs_frame = cv2.GaussianBlur(img, (5, 5), 0)                     #高斯濾波
    hsv = cv2.cvtColor(gs_frame, cv2.COLOR_BGR2HSV)                 # 轉化成HSV圖像
    erode_hsv = cv2.erode(hsv, None, iterations=2)
    return erode_hsv

#定義一個識別目標顏色并處理的函數(shù)
def select_color_img(target_color,img):
        for i in target_color:
            mask=cv2.inRange(erode_hsv,color_dist[i]['Lower'],color_dist[i]['Upper'])
            if(i==target_color[0]):
                inRange_hsv=cv2.bitwise_and(erode_hsv,erode_hsv,mask = mask)
                cv_show('res',inRange_hsv)#不必要,用于調試
            else:
                inRange_hsv1=cv2.bitwise_and(erode_hsv,erode_hsv,mask = mask)
                cv_show('res1',inRange_hsv1)#不必要,用于調試
                inRange_hsv=cv2.add(inRange_hsv,inRange_hsv1)
                cv_show('res2',inRange_hsv)#不必要,用于調試
        return  inRange_hsv

#定義一個提取輪廓的函數(shù)
def extract_contour(img):
    inRange_gray = cv2.cvtColor(final_inRange_hsv,cv2.COLOR_BGR2GRAY)
    contours,hierarchy = cv2.findContours(inRange_gray,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
    return contours
    
#定義一個尋找目標并繪制外接矩形的函數(shù)
def find_target(contours,draw_img):
    for c in contours:

        if cv2.contourArea(c) < 2000:             #過濾掉較面積小的物體
            continue
        else:
            target_list.append(c)               #將面積較大的物體視為目標并存入目標列表
    for i in target_list:                       #繪制目標外接矩形
        rect = cv2.minAreaRect(i)
        box = cv2.boxPoints(rect)
        cv2.drawContours(draw_img, [np.int0(box)], -1, (0, 255, 255), 2)
    return draw_img

#定義一個繪制中心點坐標的函數(shù)
def draw_center(target_list,draw_img):
    for  c in target_list:
        M = cv2.moments(c)                   #計算中心點的x、y坐標
        center_x = int(M['m10']/M['m00'])
        center_y = int(M['m01']/M['m00'])
        print('center_x:',center_x)          #打?。ǚ祷兀┲行狞c的x、y坐標
        print('center_y:',center_y)
    
        cv2.circle(draw_img,(center_x,center_y),7,128,-1)#繪制中心點
        str1 = '(' + str(center_x)+ ',' +str(center_y) +')' #把坐標轉化為字符串
        cv2.putText(draw_img,str1,(center_x-50,center_y+40),cv2.FONT_HERSHEY_SIMPLEX,1,(255,255,0),2,cv2.LINE_AA)#繪制坐標點位
    
    return draw_img

###主函數(shù)部分
#創(chuàng)建顏色字典
color_dist = {'red': {'Lower': np.array([0, 60, 60]), 'Upper': np.array([6, 255, 255])},
              'yellow': {'Lower': np.array([15, 160, 50]), 'Upper': np.array([35, 255, 255])},
              'green': {'Lower': np.array([50, 50, 50]), 'Upper': np.array([130, 255, 255])},
              }
#目標顏色
target_color = ['green','yellow']
#創(chuàng)建目標列表
target_list=[]

img = cv2.imread(r'D:lesson\balloom.jpg',cv2.COLOR_BGR2RGB)       #讀入圖像(直接讀入灰度圖)
draw_img = img.copy()                             #為保護原圖像不被更改而copy了一份,下面對圖像的修改都是對這個副本進行的
erode_hsv = good_thresh_img(img)
final_inRange_hsv = select_color_img(target_color,erode_hsv)
contours = extract_contour(final_inRange_hsv)
draw_img = find_target(contours,draw_img)
final_img = draw_center(target_list,draw_img)

cv_show('final_img',final_img)

效果展示

顏色提取效果:

繪制外接矩形及中心點的效果:

到此這篇關于Python+OpenCV實現(xiàn)基于顏色的目標識別的文章就介紹到這了,更多相關Python OpenCV基于顏色的目標識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python切割圖片成九宮格的示例代碼

    Python切割圖片成九宮格的示例代碼

    這篇文章主要介紹了Python切割圖片成九宮格的相關知識,本文通過截圖實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 手把手教你實現(xiàn)Python重試超時裝飾器

    手把手教你實現(xiàn)Python重試超時裝飾器

    這篇文章主要為大家介紹了實現(xiàn)Python重試超時裝飾器教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2023-05-05
  • Django中celery的使用項目實例

    Django中celery的使用項目實例

    Celery是?個 基于python開發(fā)的分布式異步消息任務隊列,通過它可以輕松的實現(xiàn)任務的異步處理,下面這篇文章主要給大家介紹了關于Django中celery使用的相關資料,需要的朋友可以參考下
    2022-07-07
  • python中Array和DataFrame相互轉換的實例講解

    python中Array和DataFrame相互轉換的實例講解

    在本篇文章里小編給大家整理的是一篇關于python中Array和DataFrame相互轉換的實例講解內(nèi)容,對此有需要的朋友們可以學參考下。
    2021-02-02
  • 詳解Python如何獲取列表(List)的中位數(shù)

    詳解Python如何獲取列表(List)的中位數(shù)

    本文通過圖文及實例代碼介紹了怎樣利用python獲取列表的中位數(shù),文章介紹的很詳細,有需要的小伙伴們可以參考學習。
    2016-08-08
  • Python使用pickle模塊報錯EOFError Ran out of input的解決方法

    Python使用pickle模塊報錯EOFError Ran out of input的解決方法

    這篇文章主要介紹了Python使用pickle模塊報錯EOFError Ran out of input的解決方法,涉及Python異常捕獲操作處理相關使用技巧,需要的朋友可以參考下
    2018-08-08
  • Python繪制計算機CPU占有率變化的折線圖

    Python繪制計算機CPU占有率變化的折線圖

    這篇文章主要為大家詳細介紹了Python繪制計算機CPU占有率變化的折線圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 關于Python字符編碼與二進制不得不說的一些事

    關于Python字符編碼與二進制不得不說的一些事

    這篇文章主要給大家介紹了關于Python字符編碼與二進制不得不說的一些事,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 如何利用Python將html轉為pdf、word文件

    如何利用Python將html轉為pdf、word文件

    網(wǎng)絡上存在很多將HTML轉換為PDF的軟件和工具,但是大家都知道收費,所以下面這篇文章主要給大家介紹了關于如何利用Python將html轉為pdf、word文件的相關資料,文中通過示例代碼介紹介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • python爬取熱搜制作詞云

    python爬取熱搜制作詞云

    這篇文章主要介紹了python爬取百度熱搜制作詞云,首先爬取百度熱搜,至少間隔1小時,存入文件,避免重復請求,如果本1小時有了不再請求,存入數(shù)據(jù)庫,供詞云包使用,爬取熱搜,具體流程請需要的小伙伴參考下面文章內(nèi)容
    2021-12-12

最新評論

海安县| 华亭县| 昂仁县| 温泉县| 兴文县| 随州市| 华宁县| 南阳市| 玛曲县| 汝南县| 图们市| 高碑店市| 河东区| 武功县| 南阳市| 吕梁市| 文昌市| 连州市| 监利县| 浠水县| 承德县| 南阳市| 元朗区| 瓮安县| 射阳县| 揭东县| 昌平区| 潍坊市| 达孜县| 涿鹿县| 铜鼓县| 什邡市| 沙田区| 南澳县| 玉门市| 微博| 江都市| 临朐县| 江永县| 昭平县| 响水县|