通过边界和背景绘制色彩



我指的是:如何从图像中提取RGB并仅将RG绘制为图形?x和g的R

我将其修改为仅为2D并读取y Cr CB值,但是在3D中绘制它并不是什么大事,只是绘制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)作为一种颜色并绘制其余的点不在这些边界之内的点。提前感谢您提供任何帮助!

请用这些行替换代码的最后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()

最新更新