如何写与OpenCV进行蟒灰色(1个通道)图像

问题描述 投票:-1回答:1

我只是想知道,如果有可能挽救灰1路图像与来自OpenCV的RGB图像开始。

import cv2
bgr_img = cv2.imread('anyrgbimage.jpg')
print(bgr_img.shape) #(x,y,3)
gray_img = cv2.cvtColor(bgr_img,cv2.COLOR_BGR2GRAY)
cv2.imwrite('hopefully_gray_image.jpg',gray_img)
#cv2.imwrite('hopefully_gray_image.jpg',gray_img,[int(cv2.COLOR_BGR2GRAY)])
buh_img = cv2.imread('hopefully_gray_image.jpg')
print(buh_img.shape) #(x,y,3)

我知道我可以添加内部cv2.imwrite一些参数,但我想不出什么。

python opencv
1个回答
2
投票

是的。让我对@Miki's comment阐述你的答案。如果看一看imread(filename[, flags])的文档,你会看到默认标志为cv2.IMREAD_COLOR,即OpenCV的将加载的图像与3个通道,在默认情况下(即使它具有1个或4个通道)。如果你想使用相同的imread(...)加载两个三和单通道图像,你应该使用标志cv2.IMREAD_UNCHANGED。在实践中,是如何运作的?

import cv2
import numpy as np

img = (np.random.random((300, 300, 3)) * 255.).astype(np.uint8)
# let's save 4 images (color/gray, png/jpg)
cv2.imwrite('img-png-color.png', img)          # output size: 270KB
cv2.imwrite('img-png-gray.png', img[:, :, 1])  # output size: 90KB
cv2.imwrite('img-jpg-color.jpg', img)          # output size: 109KB
cv2.imwrite('img-jpg-gray.jpg', img[:, :, 1])  # output size: 93KB

有两点需要注意:

  • 彩色PNG图像文件比灰度PNG图像3×大;
  • JPEG运作良好,TY :)

现在,如果你读过任何使用缺省标记这些图像,他们将满载(300,300,3)的形状。不过,如果你继续为@Miki告诉你:

cv2.imread('img-png-color.png', cv2.IMREAD_UNCHANGED).shape  # (300, 300, 3)
cv2.imread('img-png-gray.png', cv2.IMREAD_UNCHANGED).shape   # (300, 300)
cv2.imread('img-jpg-color.jpg', cv2.IMREAD_UNCHANGED).shape  # (300, 300, 3)
cv2.imread('img-jpg-gray.jpg', cv2.IMREAD_UNCHANGED).shape   # (300, 300)

因此,在实际上,灰色图像进行“保存”为单信道。

© www.soinside.com 2019 - 2024. All rights reserved.