我想将 RGB 图像转换为 CMYK。这是我的代码;第一个问题是,当我将每个像素除以 255 时,该值接近于零,因此生成的图像近似为黑色!第二个问题是我不知道如何将单通道结果图像转换为 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()