您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)怎么在python中使用cv2.inRange函數(shù),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
Python主要應(yīng)用于:1、Web開(kāi)發(fā);2、數(shù)據(jù)科學(xué)研究;3、網(wǎng)絡(luò)爬蟲(chóng);4、嵌入式應(yīng)用開(kāi)發(fā);5、游戲開(kāi)發(fā);6、桌面應(yīng)用開(kāi)發(fā)。
hsv = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV)
然后利用cv2.inRange函數(shù)設(shè)閾值,去除背景部分
mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0,
第一個(gè)參數(shù):hsv指的是原圖
第二個(gè)參數(shù):lower_red指的是圖像中低于這個(gè)lower_red的值,圖像值變?yōu)?
第三個(gè)參數(shù):upper_red指的是圖像中高于這個(gè)upper_red的值,圖像值變?yōu)?
而在lower_red~upper_red之間的值變成255
lower_red = np.array([20, 20, 20]) upper_red = np.array([200, 200, 200]) mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0,lower~upper==>255
就是將低于lower_red和高于upper_red的部分分別變成0,lower_red~upper_red之間的值變成255
hsv = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV) lower_red = np.array([20, 20, 20]) upper_red = np.array([200, 200, 200]) # mask -> 1 channel mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0
補(bǔ)充:色彩閥值化處理——openCV-python中inRange()等相關(guān)函數(shù)實(shí)測(cè)
在圖像處理的過(guò)程中,使用各種形態(tài)學(xué)操作或者濾波的方式來(lái)突顯我們關(guān)注的元素,同時(shí)降低噪聲并減少干擾我們提取關(guān)鍵元素的影響項(xiàng)。除了這些方法外,我們可以在原圖中先依據(jù)顏色的特征,提取出更為關(guān)鍵的像素。就像車道檢測(cè)時(shí),一般車道只有兩種顏色:黃色和白色。所以我們可以在 RGB 色彩空間(Color Space) 對(duì)這兩種顏色進(jìn)行過(guò)濾從而提取出車道線的像素。
色彩空間:使用一組值(通常使用三個(gè)、四個(gè)值或者顏色成分)表示顏色方法的抽象數(shù)學(xué)模型。有利用原色相混的比例表示的色彩空間,如 RGB (Red, Green, Blue) 顏色空間; 也有利用不同的概念表示的色彩空間,如 HSV (色相 hue, 飽和度 saturation, 明度 value) 以及 HSL (色相 hue,飽和度 saturation,亮度 lightness/luminance) 。
在OpenCV中,RGB三通道的圖像的讀取 cv2.imread() 的結(jié)果是以 BGR 順序排列的,而在使用matplotlib的 plt.imread() 時(shí), 讀取的通道排列順序則為 RGB 。因此此處應(yīng)當(dāng)注意區(qū)別。
openCV中cv2.inRange()函數(shù)是實(shí)現(xiàn)該功能的關(guān)鍵,我們先看看官網(wǎng)對(duì)該函數(shù)的定義:
dst = cv.inRange( src, lowerb, upperb[, dst] )
檢測(cè)數(shù)組元素是否位于其他兩個(gè)元素之間。
對(duì)于單通道輸入的每個(gè)元素:
對(duì)于雙通道輸入:
同樣應(yīng)用于四通道
也就是說(shuō),如果src (I)在指定的1D, 2D, 3D,…框內(nèi)則dst(I)為255,否則為0。當(dāng)下邊界和/或上邊界參數(shù)為標(biāo)量時(shí),應(yīng)省略上述公式中在上、下邊界處的索引(I)。
src 輸入的數(shù)組
lowerb 下邊界數(shù)組或標(biāo)量.
upperb 上邊界數(shù)組或標(biāo)量.
dst 與src和CV_8U類型大小相同的輸出數(shù)組。
接下來(lái)將結(jié)合簡(jiǎn)單的例子通過(guò)python更好地理解這個(gè)函數(shù):
import matplotlib.pyplot as plt import numpy as np import cv2 # 對(duì)圖片進(jìn)行讀取 img_cv2 = cv2.imread('D:\\test\\CVtest.jpg') print(img_cv2)
為了方便理解,我用畫(huà)板工具畫(huà)了一個(gè)5×5像素點(diǎn)的紅色圖片。上述代碼運(yùn)行結(jié)果為:
[[[ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237]] [[ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237]] [[ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237]] [[ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237]] [[ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237] [ 36 27 237]]]
讀者可以自行測(cè)試一下,B=36,G=27,R=237為紅色。
# 創(chuàng)建RGB色彩空間 color_Low1 = np.array([30,27,237]) color_Low2 = np.array([39,27,237]) color_High = np.array([40,27,237]) # 對(duì)圖片進(jìn)行閥值化處理 img_dst1 = cv2.inRange(img_cv2,color_Low1,color_High) img_dst2 = cv2.inRange(img_cv2,color_Low2,color_High) #對(duì)結(jié)果進(jìn)行打印 print(img_dst1,'\n', img_dst2) # 運(yùn)行結(jié)果分別為 [[255 255 255 255 255] [255 255 255 255 255] [255 255 255 255 255] [255 255 255 255 255] [255 255 255 255 255]] [[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
可以看出,當(dāng)圖片中的像素點(diǎn)落在色彩空間時(shí),輸出結(jié)果全是255,當(dāng)像素點(diǎn)不落在色彩空間是,輸出結(jié)果全是0。對(duì)最終結(jié)果進(jìn)行顯示:
#對(duì)圖像進(jìn)行展示 cv2.imshow("origin_img",img_cv2) cv2.imshow("dst_img1",img_dst1) cv2.imshow("dst_img2",img_dst2) cv2.waitKey(0) cv2.destroyAllWindows()
以上就是怎么在python中使用cv2.inRange函數(shù),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。