Python圖像處理之使用OpenCV檢測(cè)對(duì)象顏色
前言
檢測(cè)圖像中對(duì)象顏色的一種簡(jiǎn)單方法是首先將圖像從 RGB
轉(zhuǎn)換為 HSV
顏色空間,然后使用一系列色調(diào)檢測(cè)對(duì)象,這可以通過(guò)使用 OpenCV
庫(kù)輕松完成。為了完成對(duì)象檢測(cè)任務(wù),我們需要使用感興趣對(duì)象的顏色值范圍,使用顏色值范圍識(shí)別和提取的圖像中目標(biāo)對(duì)象。之后,我們可以更改檢測(cè)到的對(duì)象的顏色,甚至可以直接刪除檢測(cè)到的對(duì)象。
使用 OpenCV 檢測(cè)對(duì)象顏色
在本節(jié)中,我們將使用的輸入圖像是位于網(wǎng)球場(chǎng)的女孩,而感興趣的對(duì)象是女孩的頭發(fā)。我們首先將 RGB
圖像轉(zhuǎn)換到 HSV
色彩空間,從而檢測(cè)黑色色值區(qū)域。
(1) 首先加載所需的庫(kù),并讀取輸入圖像:
import cv2 import numpy as np import matplotlib.pylab as plt img = cv2.imread("1.png") hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
(2) 通過(guò)選擇黑色頭發(fā)可能擁有的 HSV
顏色范圍來(lái)為頭發(fā)創(chuàng)建掩碼,然后從輸入圖像中提取黑色頭發(fā):
mask = cv2.inRange(hsv, (0, 70, 80), (15, 255, 255)) imask = mask>0 hair = np.zeros_like(img) hair[imask] = img[imask]
(3) 通過(guò)減少 HSV
通道值,然后將圖像轉(zhuǎn)換回 BGR
空間,將黑色頭發(fā)的顏色更改為其他顏色。
用于提取與彩色對(duì)象相對(duì)應(yīng)的像素的函數(shù)如下所示,該函數(shù)通過(guò)檢查像素值是否在下限和上限指定的值范圍內(nèi)來(lái)獲取對(duì)應(yīng)像素:
cv2.inRange(src, lowerb, upperb)
函數(shù) inRange()
檢查 src
元素是否位于 lowerv
和 upperb
構(gòu)成的區(qū)間范圍內(nèi)。
black = img.copy() hsv[..., 0:3] = hsv[..., 0:3] / 8 black[imask] = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)[imask] black = np.clip(black, 0, 255)
(4) 最后,繪制輸入圖像,提取的黑色頭發(fā),修改頭發(fā)顏色并顯示帶有修改頭發(fā)顏色后的輸出圖像:
plt.figure(figsize=(20,10)) plt.subplots_adjust(0,0,1,0.9,0.01,0.075) plt.subplot(131), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.title('original', size=10) plt.subplot(132), plt.imshow(cv2.cvtColor(hair, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.title('only hair', size=10) plt.subplot(133), plt.imshow(cv2.cvtColor(black, cv2.COLOR_BGR2RGB)) plt.axis('off'), plt.title('hair color changed', size=10) plt.suptitle('Detecting and changing object colors with opencv', size=15) plt.show()
總結(jié)
到此這篇關(guān)于Python圖像處理之使用OpenCV檢測(cè)對(duì)象顏色的文章就介紹到這了,更多相關(guān)Python OpenCV檢測(cè)對(duì)象顏色內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)用小技巧之判斷輸入是否為漢字/英文/數(shù)字
這篇文章主要給大家介紹了關(guān)于Python實(shí)用小技巧之判斷輸入是否為漢字/英文/數(shù)字的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-06-06Python使用cx_Oracle模塊將oracle中數(shù)據(jù)導(dǎo)出到csv文件的方法
這篇文章主要介紹了Python使用cx_Oracle模塊將oracle中數(shù)據(jù)導(dǎo)出到csv文件的方法,涉及Python中cx_Oracle模塊與csv模塊操作Oracle數(shù)據(jù)庫(kù)及csv文件的相關(guān)技巧,需要的朋友可以參考下2015-05-05Python自動(dòng)打印被調(diào)用函數(shù)變量名及對(duì)應(yīng)值?
這篇文章主要介紹了Python自動(dòng)打印被調(diào)用函數(shù)的變量名及對(duì)應(yīng)的值,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià),需要的朋友可以參考一下?2022-07-07python中extend函數(shù)舉例詳解以及對(duì)比
Python中的extend函數(shù)是用于將一個(gè)列表的元素添加到另一個(gè)列表中,它會(huì)將第一個(gè)列表中的元素逐個(gè)添加到第二個(gè)列表的末尾,這篇文章主要給大家介紹了關(guān)于python中extend函數(shù)舉例詳解以及對(duì)比的相關(guān)資料,需要的朋友可以參考下2024-03-03Python中的浮點(diǎn)數(shù)原理與運(yùn)算分析
這篇文章主要介紹了Python中的浮點(diǎn)數(shù)原理與運(yùn)算分析,結(jié)合實(shí)例形式分析了Python浮點(diǎn)數(shù)操作的常見錯(cuò)誤,并簡(jiǎn)單解釋了浮點(diǎn)數(shù)運(yùn)算的原理與比較運(yùn)算實(shí)現(xiàn)方法,需要的朋友可以參考下2017-10-10