Pra*_*uti 5 opencv numpy image python-2.7
我想更改图像的背景并向其添加 Alpha 通道,然后再将其保存为 png 文件。
imshow显示图像,但imwrite写入空图像。合并后的尺寸也是正确的,即合并后的图像(x,y,4)在打印时具有img_a.shape
图像深度为uint8. 我尝试将其更改为float32然后除以255但似乎没有任何效果。我缺少一些基本的东西。
我应该怎么做才能imwrite用 alpha 通道写入正确的 png ?我尝试cv2.merge过并且np.dstack。imwrite写失败。用 gimp 打开它时,它显示一层。
以下是我的代码。
imgo = cv2.imread('PCP_1.jpg')
image = cv2.GaussianBlur(imgo, (5, 5), 0)
r = image.shape[0]
c = image.shape[1]
shp = (r,c,1)
c_red, c_green, c_blue = cv2.split(image)
#c_red = c_red.astype(np.float32)
#c_green =c_green.astype(np.float32)
#c_blue = c_blue.astype(np.float32)
alphachn = np.zeros(shp)
#alphachn = alphachn.astype(np.float32)
img_a = cv2.merge((c_red, c_green, c_blue, alphachn))
#img_a = np.dstack( (imgo, np.zeros(shp).astype(np.uint8) ) )
print img_a.shape
cv2.imshow('image', img_a)
cv2.imwrite('image_alpha.png', img_a)
k = cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)
问题在于您的 alpha 通道,图像显示imshow但未显示的imwerite原因在于cv2.imshow() 拒绝 alpha 通道,而 imwrite 考虑 alpha 通道。
根据您的代码,您定义的 alpha 通道alphachn = np.zeros(shp)创建了一个充满零的 numpy 矩阵,并且全零值的 alpha 通道意味着透明图像,或者换句话说,如果 alpha 通道为零,则该像素的 RGB 值是永远不可见,这就是您得到空图像的原因imwrite()。
为了解决这个问题,你应该初始化 alpha,alphachn = np.ones(shp, dtype=np.uint8)*255它创建了一个 numpy 矩阵,并255填充了值。如果您想调整 Alpha 通道值以获得半透明结果,那么您可以使用 150 而不是 255。
| 归档时间: |
|
| 查看次数: |
6805 次 |
| 最近记录: |