Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有什么简单的方法可以用cv2分析透明png图像吗?_Python_Python 3.x_Opencv_Cv2 - Fatal编程技术网

Python 有什么简单的方法可以用cv2分析透明png图像吗?

Python 有什么简单的方法可以用cv2分析透明png图像吗?,python,python-3.x,opencv,cv2,Python,Python 3.x,Opencv,Cv2,我试图用CV2加载一个透明图像(没有背景),但是当我试图显示图像时,我得到了一个黑色背景。是否有任何可能(且简单)的方式加载透明PNG图像? 输入: 结果是: 这是我得到的结果: 即使我在努力 此代码: import cv2 im = cv2.imread("image.png", cv2.IMREAD_UNCHANGED) cv2.imshow('test',im) 我得到的结果是黑色背景您正在加载的图像有四个通道。检查数组大小。通道4是alpha通道,您可以使用alpha通道相应地保存

我试图用CV2加载一个透明图像(没有背景),但是当我试图显示图像时,我得到了一个黑色背景。是否有任何可能(且简单)的方式加载透明PNG图像? 输入:

结果是:

这是我得到的结果: 即使我在努力 此代码:

import cv2
im = cv2.imread("image.png", cv2.IMREAD_UNCHANGED)
cv2.imshow('test',im)

我得到的结果是黑色背景

您正在加载的图像有四个通道。检查数组大小。通道4是alpha通道,您可以使用alpha通道相应地保存图像。还可以从alpha通道生成掩码(在OpenCV中,掩码是二进制的,分别为0和255)

大多数OpenCV操作都在4通道图像上工作,但它们不会对alpha通道进行特殊处理或从中获取任何信息。

cv.loadImage()用于多通道校准。对单个图像使用cv.imread()。要获得透明度,必须使用cv.IMREAD\u的标志未更改

下面是如何在Python/OpenCV中实现这一点。请注意,使用cv.imshow将看不到透明度。它将是黑色的。要做进一步的分析,您应该提取alpha通道作为遮罩,并将其用于任何您想做的事情,以限制对鞋的处理,而不是对鞋周围的背景进行处理

import cv2

# load image with alpha channel
img = cv2.imread('shoe.png', cv2.IMREAD_UNCHANGED)

# get mask from alpha channel
mask = img[:,:,3]

# view images
# NOTE: imshow does not show transparency. It will be black there.
cv2.imshow('img', img)
cv2.imshow('mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

# Saving the image does contain transparency as can be seen when viewed with some external viewer.
cv2.imwrite('shoe_copy.png', img)

您能否发布用于加载和显示图像的代码片段。请展示堆栈溢出问题所需的最小完整且可验证的代码示例,并且由于您的问题是关于图像处理的,请至少显示原始输入图像。谢谢。你们有透明显示器吗?也许只是透过透明区域的黑色发光?显示器不能显示透明颜色。如果你没有明确指定背景,也许黑色只是默认的。请在你的问题中输入代码,而不是在注释中输入未格式化且难以阅读的代码。您的问题的答案是,您需要向
cv2.imread()
.cv::imread\u UNCHANGED=-1添加第二个参数,但请记住,渲染(imshow)仍然不会使用透明度。