如何解决将灰度 2D numpy 图像投影到 RGB 中?
我有一个灰度 numpy 图像 (shape=(1024,1024,1)
,dtype=float
),我试图将其转换为相同的图像,但灰度值分配给红色通道(即相同的图像但是是红标)。
这是原图:
使用 numpy 生成的:
def create_mandelbrot_matrix(width,height,max_iter=100):
X = np.linspace(-2,1,width)
Y = np.linspace(-1,height)
#broadcast X to a square array
C = X[:,None] + 1J * Y
#initial value is always zero
Z = np.zeros_like(C)
exit_times = max_iter * np.ones(C.shape,np.int32)
mask = exit_times > 0
for k in range(max_iter):
Z[mask] = Z[mask] * Z[mask] + C[mask]
mask,old_mask = abs(Z) < 2,mask
#use XOR to detect the area which has changed
exit_times[mask ^ old_mask] = k
return exit_times.T
def mandelbrot_image(width,max_iter=100):
mandelbrot_matrix = create_mandelbrot_matrix(width,max_iter)
img = np.expand_dims(mandelbrot_matrix,axis=2)
return img
此功能产生与原始图像完全不同的图像:
def mandelbrot_red_image(w,h):
mandelbrot_img = mandelbrot_image(w,h)
print(mandelbrot_img.shape) # (1024,1)
img = np.zeros((w,h,3))
img[:,:,0] = mandelbrot_img_int.reshape((w,h))
return img
解决方法
我不知道你的 mandelbrot_image 是如何工作的,但图像形状通常是 (h,w),因为矩阵中的行数是第一维,而高度是。
另一点是,也许你的 dtype 不是 'uint8',我必须做一个转换才能使图像正确显示。
这段代码对我有用
from cv2 import cv2
import numpy as np
img = cv2.imread('./mandelbrot.png',cv2.IMREAD_GRAYSCALE)
h,w = img.shape
color_img = np.zeros([h,w,3])
color_img[:,:,2] = img # In opencv images are BGR
cv2.imshow('color_mandelbrot',color_img.astype('uint8'))
cv2.waitKey(0)
cv2.destroyAllWindows()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。