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

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

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

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

任務(wù)

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

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

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

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

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

話不多說我們來看一下具體的代碼實現(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)學(xué)處理的函數(shù)
def good_thresh_img(img):
    gs_frame = cv2.GaussianBlur(img, (5, 5), 0)                     #高斯濾波
    hsv = cv2.cvtColor(gs_frame, cv2.COLOR_BGR2HSV)                 # 轉(zhuǎn)化成HSV圖像
    erode_hsv = cv2.erode(hsv, None, iterations=2)
    return erode_hsv

#定義一個識別目標(biāo)顏色并處理的函數(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)#不必要,用于調(diào)試
            else:
                inRange_hsv1=cv2.bitwise_and(erode_hsv,erode_hsv,mask = mask)
                cv_show('res1',inRange_hsv1)#不必要,用于調(diào)試
                inRange_hsv=cv2.add(inRange_hsv,inRange_hsv1)
                cv_show('res2',inRange_hsv)#不必要,用于調(diào)試
        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
    
#定義一個尋找目標(biāo)并繪制外接矩形的函數(shù)
def find_target(contours,draw_img):
    for c in contours:

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

#定義一個繪制中心點坐標(biāo)的函數(shù)
def draw_center(target_list,draw_img):
    for  c in target_list:
        M = cv2.moments(c)                   #計算中心點的x、y坐標(biāo)
        center_x = int(M['m10']/M['m00'])
        center_y = int(M['m01']/M['m00'])
        print('center_x:',center_x)          #打?。ǚ祷兀┲行狞c的x、y坐標(biāo)
        print('center_y:',center_y)
    
        cv2.circle(draw_img,(center_x,center_y),7,128,-1)#繪制中心點
        str1 = '(' + str(center_x)+ ',' +str(center_y) +')' #把坐標(biāo)轉(zhuǎn)化為字符串
        cv2.putText(draw_img,str1,(center_x-50,center_y+40),cv2.FONT_HERSHEY_SIMPLEX,1,(255,255,0),2,cv2.LINE_AA)#繪制坐標(biāo)點位
    
    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])},
              }
#目標(biāo)顏色
target_color = ['green','yellow']
#創(chuàng)建目標(biāo)列表
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)

效果展示

顏色提取效果:

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

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

相關(guān)文章

  • Python 3 中使用 Memcached的示例詳解

    Python 3 中使用 Memcached的示例詳解

    pymemcache是另一個流行的、功能豐富的Python Memcached客戶端庫,比python-memcached提供了復(fù)雜的操作和性能,在 Python3 中,使用 Memcached,高性能的分布式內(nèi)存對象緩存系統(tǒng),可以通過多個第三方庫來實現(xiàn),本文介紹Python 使用 Memcached相關(guān)知識,感興趣的朋友一起看看吧
    2024-02-02
  • Pytest+Yaml+Excel?接口自動化測試框架的實現(xiàn)示例

    Pytest+Yaml+Excel?接口自動化測試框架的實現(xiàn)示例

    本文主要介紹了Pytest+Yaml+Excel?接口自動化測試框架,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • python的多元數(shù)據(jù)類型(下)

    python的多元數(shù)據(jù)類型(下)

    這篇文章主要為大家詳細(xì)介紹了python的多元數(shù)據(jù)類型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • PyCharm控制臺堆棧亂碼問題解決方案

    PyCharm控制臺堆棧亂碼問題解決方案

    PyCharm環(huán)境都已經(jīng)配置成了UTF-8編碼,控制臺打印中文也不會出現(xiàn)亂碼,但報錯堆棧信息中如果有中文會出現(xiàn)中文亂碼,遇到這樣的問題如何解決呢,下面小編給大家?guī)砹薖yCharm控制臺堆棧亂碼問題解決方案,感興趣的朋友一起看看吧
    2023-12-12
  • Python爬蟲網(wǎng)頁元素定位術(shù)

    Python爬蟲網(wǎng)頁元素定位術(shù)

    這篇文章主要介紹了Python爬蟲網(wǎng)頁元素定位術(shù),文章通過Beautiful?Soup模塊展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 深入flask之異步非堵塞實現(xiàn)代碼示例

    深入flask之異步非堵塞實現(xiàn)代碼示例

    這篇文章主要介紹了深入flask之異步非堵塞實現(xiàn)代碼示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • python實現(xiàn)opencv+scoket網(wǎng)絡(luò)實時圖傳

    python實現(xiàn)opencv+scoket網(wǎng)絡(luò)實時圖傳

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)opencv+scoket網(wǎng)絡(luò)實時圖傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • python中cPickle用法例子分享

    python中cPickle用法例子分享

    這篇文章主要介紹了python中cPickle用法例子,有需要的朋友可以參考一下
    2014-01-01
  • Python3 itchat實現(xiàn)微信定時發(fā)送群消息的實例代碼

    Python3 itchat實現(xiàn)微信定時發(fā)送群消息的實例代碼

    使用微信,定時往指定的微信群里發(fā)送指定信息。接下來通過本文給大家分享Python3 itchat實現(xiàn)微信定時發(fā)送群消息的實例代碼,需要的朋友可以參考下
    2019-07-07
  • python 堆和優(yōu)先隊列的使用詳解

    python 堆和優(yōu)先隊列的使用詳解

    這篇文章主要介紹了python 堆和優(yōu)先隊列的使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03

最新評論