2016-06-21 18 views
1

ポスト:しかし3Dでそれをプロットし、私はそれだけで、2D可能とY CrのCb値を読み込むように変更How to extract RGB from an image and plot only RG as a graph? R for X and G for Y境界によってプロットクロミナンスと背景

は、大した主なものだけでプロットされていないですCb Cr値を計算し、私が掲示した境界に基づいてそれを実行します。

import numpy as np 
import cv2 
import matplotlib.image as mpimg 
from matplotlib import pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

#Variables 
Y_MIN = 80 
Y_MAX = 255 
Cb_MIN = 85 
Cb_MAX = 135 
Cr_MIN = 135 
Cr_MAX = 180 

img = mpimg.imread('Webcam.png') 
YCR_CB = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB) 
pixels = YCR_CB.shape[0]*YCR_CB.shape[1] 
channels = 3 
data = np.reshape(YCR_CB[:, :, :channels], (pixels, channels)) 

histo_rgb, _ = np.histogramdd(data, bins=256) 
Y, Cb, Cr = np.nonzero(histo_rgb) 

plt.scatter(Cb, Cr) 
plt.title('Chrominance') 
plt.show() 

私はこれを取ると、それは(CB、Cr)の ((Y> Y_MIN)&(CB> Cb_MIN)&(CB < Cb_MAX)&(CR> Cr_MINに収まる値をプロットしたいです)&(Cr < Cr_MAX)) を1色として、これらの境界内に収まらない残りの点を別の色としてプロットします。ご協力いただきありがとうございます!

答えて

0

これらの行で、あなたのコードの最後の3行を交換してください:

crit0 = Y > Y_MIN 
crit1 = np.logical_and(Cb > Cb_MIN, Cb < Cb_MAX) 
crit2 = np.logical_and(Cr > Cr_MIN, Cr < Cr_MAX) 

tot_crit = np.logical_and(np.logical_and(crit0, crit1), crit2) 
i = np.where(tot_crit) 
j = np.where(np.invert(tot_crit)) 

plt.scatter(Cb[i], Cr[i]) 
plt.scatter(Cb[j], Cr[j], c='r') 
plt.title('Chrominance') 
plt.show() 
関連する問題