按边界和背景绘制色度

2024-03-28 18:20:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我指的是:How to extract RGB from an image and plot only RG as a graph? R for X and G for Y

我把它改成了二维的,然后读取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最小值)&;(Cb>;Cb最小值)&;(Cb<;Cb最大值)&;(Cr>;Cr最小值)&;(Cr<;Cr最大值)) 作为一种颜色,并绘制不属于这些边界的其他点作为另一种颜色。提前感谢您的帮助!你知道吗


Tags: fromimportasnp绘制pltmincv2
1条回答
网友
1楼 · 发布于 2024-03-28 18:20:55

请将代码的最后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()

相关问题 更多 >