使用 OpenCV 时无法将图像转换为灰度

oo92

我有一个透明的标志,我想使用 OpenCV 将其转换为灰度。我正在使用以下代码

def to_grayscale(logo):
    gray = cv2.cvtColor(logo, cv2.COLOR_RGB2GRAY)
    blur = cv2.GaussianBlur(gray, (5, 5), 0)
    canny = cv2.Canny(blur, 50, 150)  # sick
    return canny

这是图像变量:

brand_logo = Image.open(current_dir + '/logos/' + logo_image, 'r').convert('RGBA')
brand_logo = to_grayscale(brand_logo)

这是错误:

TypeError: Expected Ptr<cv::UMat> for argument 'src'

我试图.convert('L')从 PIL 中使用,但它使它成为 90% 透明的灰色。无论如何我可以解决这个问题吗?

更新

def to_grayscale(logo):
    OCVim = np.array(logo)
    BGRim = cv2.cvtColor(OCVim, cv2.COLOR_RGB2BGR)
    blurry = cv2.GaussianBlur(BGRim, (5, 5), 0)
    canny = cv2.Canny(blurry, 50, 150)
    PILim = Image.fromarray(canny)
    return PILim

在此处输入图片说明

马克·塞切尔

您正在不必要地混合OpenCVPIL/Pillow,并且会混淆自己。如果你用PIL打开一个图像,你会得到一个PIL ImageOpenCV 毫无用处的图像,因为:

  • OpenCV期望Numpy arrays, 不是PIL Images, 和
  • OpenCV使用 BGR 排序,而不是像PIL使用的RGB 排序

保存图像时同样适用。

有三种可能的解决方案:

  • 坚持PIL
  • 坚持使用OpenCV
  • 每次在两个包之间移动时都进行转换。

转换PIL ImageOpenCVNumpy array

OCVim = np.array(PILim)

要转换的OpenCVNumpy arrayPIL Image

PILim = Image.fromarray(OCVim)

要反转颜色顺序,显然不需要灰度,请使用:

BGRim = cv2.cvtColor(RGBim, cv2.COLOR_RGB2BGR)

或使用负 Numpy 步幅:

BGRim = RGBim[..., ::-1]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用OpenCV将RGB图像转换为灰度图像时,为什么会得到绿色图像?

使用OpenCV将图像列表转换为灰度

使用 OpenCV 将灰度图像转换为负片

如何使用Python OpenCV将灰度图像转换为热图图像

opencv将图像转换为灰度,并使用matplotlib显示会产生奇怪的颜色

使用opencv将彩色/灰度图像转换为具有可控帧频的视频

使用node.js中的opencv-node将24位RGB图像转换为8位灰度

使用numpy将图像转换为灰度

无法在Opencv中将黑白图像转换为灰度

将图像转换为灰度时,OpenCV中有异常

OpenCV Python 如何在将图像转换为灰度时保持一种颜色

想要将彩色图像添加到列表,然后使用OpenCV将该列表转换为灰度

将图像从网络摄像头转换为灰度OpenCV

OpenCV如何将图像转换为灰度?

使用opencv将图像从BGR转换为ARGB

使用opencv将RGB图像转换为一维数组

在 OpenCV 中将灰度图像转换为单色

使用XAML将彩色图像转换为灰度图像?

OpenCV转换为灰度无法正常工作

如何使用OpenCV Python将红色通道与灰度图像合并?

使用imagemagick将JPG图像从灰度转换为RGB

使用 Java 将多个图像转换为灰度

使用某些系数将图像转换为灰度的最快方法

使用 numpy 将 BGR 图像转换为灰度

使用matplotlib显示灰度OpenCV图像

OpenCV2将图像转换为灰度并找到边缘但出现此错误

如何在OpenCV(Python)中将灰度图像转换为RGB?

如何在OpenCV(Python)中将灰度图像转换为RGB?

Python-使用OpenCV将字节图像转换为NumPy数组