【发布时间】:2020-07-03 22:43:41
【问题描述】:
我想将 rgb 图像转换为 cmyk。这是我的代码,第一个问题是,当我将每个像素除以 255 时,值接近于零,因此结果图像近似为黑色! 第二个问题是,我不知道如何将 1 通道结果图像转换为 4 通道。 当然,我不确定以下代码中制作的 CMYK 是否正确。 感谢您的关注
import cv2
import numpy as np
import time
img = cv2.imread('image/dr_trump.jpg')
B = img[:, :, 0]
G = img[:, :, 1]
R = img[:, :, 2]
B_ = np.copy(B)
G_ = np.copy(G)
R_ = np.copy(R)
K = np.zeros_like(B)
C = np.zeros_like(B)
M = np.zeros_like(B)
Y = np.zeros_like(B)
ts = time.time()
for i in range(B.shape[0]):
for j in range(B.shape[1]):
B_[i, j] = B[i, j]/255
G_[i, j] = G[i, j]/255
R_[i, j] = R[i, j]/255
K[i, j] = 1 - max(B_[i, j], G_[i, j], R_[i, j])
if (B_[i, j] == 0) and (G_[i, j] == 0) and (R_[i, j] == 0):
# black
C[i, j] = 0
M[i, j] = 0
Y[i, j] = 0
else:
C[i, j] = (1 - R_[i, j] - K[i, j])/float((1 - K[i, j]))
M[i, j] = (1 - G_[i, j] - K[i, j])/float((1 - K[i, j]))
Y[i, j] = (1 - B_[i, j] - K[i, j])/float((1 - K[i, j]))
CMYK = C + M + Y + K
t = (time.time() -ts)
print("Loop: {:} ms".format(t*1000))
cv2.imshow('CMYK by loop',CMYK)
cv2.waitKey(0)
cv2.destroyAllWindows()
【问题讨论】:
-
你在哪里找到
CMYK = C + M + Y + K? -
您可以找到 rgb 到 cmyk here 的实现。请看一看。
-
我认为通过这个总结,我在 1 个通道中得到了结果图像,但实际上我不确定。
-
非常感谢,我已经看到了,如何将返回值显示为图像?
-
您需要使用
np.stack将C、M、Y和K堆叠在一起