2016-05-04 114 views
2

我正在使用opencv和python。圖像中物體的顏色檢測

我需要檢測圖像中物體的顏色,例如下圖所示,襯衫的顏色是紅色的。

enter image description here

enter image description here

在這個環節,我發現一些有用的東西,但皮膚及其檢測圖像。我想我將不得不使用圖像輪廓提取,然後進行顏色檢測。

回答

4

獲得主色,可以實現使用以下簡單的方法:

from sklearn.cluster import KMeans 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.patches as patches 

img = cv2.imread('red_shirt.jpg') 
height, width, dim = img.shape 

編輯:僅取的圖像的中心:

img = img[(height/4):(3*height/4), (width/4):(3*width/4), :] 
height, width, dim = img.shape 

img_vec = np.reshape(img, [height * width, dim]) 

kmeans = KMeans(n_clusters=3) 
kmeans.fit(img_vec) 

編輯:計數簇像素,順序簇由簇大小

unique_l, counts_l = np.unique(kmeans.labels_, return_counts=True) 
sort_ix = np.argsort(counts_l) 
sort_ix = sort_ix[::-1] 

fig = plt.figure() 
ax = fig.add_subplot(111) 
x_from = 0.05 

for cluster_center in kmeans.cluster_centers_[sort_ix]: 
    ax.add_patch(patches.Rectangle((x_from, 0.05), 0.29, 0.9, alpha=None, 
            facecolor='#%02x%02x%02x' % (cluster_center[2], cluster_center[1], cluster_center[0]))) 
    x_from = x_from + 0.31 

plt.show() 

enter image description here

可以移除BG和皮膚像素與this kind of preprocessing

+0

好生病檢查出來,這是我尋找的東西 – usernan

+0

如果你只需要一種顏色,你可以使用幾種啓發式方法來根據位置,飽和度和像素來選擇合適的顏色計數,但這取決於您的輸入的外觀和確切的要求 –

+0

我正在刪除背景圖像,然後試圖找出顏色,貝茲大部分時間它給我白色作爲第一選擇 – usernan

1
  1. 裝入幀
  2. 轉換BGR到HSV
  3. 範圍像素的值

還檢查了這個鏈接Color detection in opencv

+0

以上sol你說的是當你想要檢測給定的顏色例子檢測圖像中的藍色。但我想知道什麼是圖像的顏色 – usernan