1. 程式人生 > >OpenCV練習:嘗試同時提取多個不同的顏色物體,比如同時提取紅,藍,綠三個不同顏色的物體。

OpenCV練習:嘗試同時提取多個不同的顏色物體,比如同時提取紅,藍,綠三個不同顏色的物體。

python:

1.先是通過

import cv2
import numpy as np

red = np.uint8([[[255,0,0]]])
hsv_red=cv2.cvtColor(red,cv2.COLOR_BGR2HSV)
print hsv_red

green=np.uint8([[[0,255,0]]])
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print hsv_green

blue = np.uint8([[[0,0,255]]])
hsv_blue=cv2.cvtColor(blue,cv2.COLOR_BGR2HSV)
print hsv_blue

得出紅綠藍的HSV值。結果是:

注意此時的值是在OpenCV的條件下得出,則預設是使用BGR的順序。

2.通過程式碼實現同時提取紅,藍,綠三個不同顏 色的物體的功能。

#coding=utf-8</code>
import cv2
import numpy as np

cap=cv2.VideoCapture(0)
while(1):
	# 獲取每一幀
	ret,frame=cap.read()
	# 轉換到 HSV
	hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
	# 設定閾值,注意這裡使用的numpy所以回到了RGB的順序,之前在BGR狀態下閾值是0-120,故現在是60-180
	lower_blue=np.array([60,100,100])
	upper_blue=np.array([180,255,255])
	# 根據閾值構建掩模
	mask=cv2.inRange(hsv,lower_blue,upper_blue)
	# 對原影象和掩模進行位運算
	res=cv2.bitwise_and(frame,frame,mask=mask)
	# 顯示影象
	cv2.imshow('frame',frame)
	cv2.imshow('mask',mask)
	cv2.imshow('res',res)
	k=cv2.waitKey(5)&0xFF
	if k==27:
		break
# 關閉視窗
cv2.destroyAllWindows()

實現結果: