mef*_*man 0 python opencv image-processing
我想查看热图像、RGB 图像、灰度图像和二值图像的通道数。
所以我写了这个程序:
import cv2
import numpy
img = cv2.imread("B2DBy.jpg")
print('No of Channel is: ' + str(img.ndim))
cv2.imshow("Channel", img)
cv2.waitKey()
Run Code Online (Sandbox Code Playgroud)
但它为所有类型的图像提供了相同的三通道结果?我已经阅读了这个问题,但它给出了一个错误:
img = cv2.imread("B2DBy.jpg", CV_LOAD_IMAGE_UNCHANGED)
NameError: name 'CV_LOAD_IMAGE_UNCHANGED' is not defined
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:这是查看频道数量的正确方法吗?或者,不知何故,我一直输入三通道图像,因此它给出了三通道输出?
我的输入:
您的正确参数cv2.imread应该是:
img = cv2.imread('path/to/your/image', cv2.IMREAD_UNCHANGED)
Run Code Online (Sandbox Code Playgroud)
现在让我们来看看你的图像。我使用ImageJ的Show Info...命令以及以下带有 OpenCV 和Pillow 的Python 代码:
import cv2
from PIL import Image
img_pil = Image.open('path/to/your/image')
print('Pillow: ', img_pil.mode, img_pil.size)
img = cv2.imread('path/to/your/image', cv2.IMREAD_UNCHANGED)
print('OpenCV: ', img.shape)
Run Code Online (Sandbox Code Playgroud)
Pillow: RGB (640, 512)
OpenCV: (512, 640, 3)
Run Code Online (Sandbox Code Playgroud)
ImageJ 还说,那是一个 RGB 图像。因此,很可能您的深度图只是保存为 RGB png。
Pillow: RGB (332, 300)
OpenCV: (300, 332, 3)
Run Code Online (Sandbox Code Playgroud)
有趣的是,ImageJ 说,这是一个灰度jpg!我认为,OpenCV 和 Pillow 只是不支持灰度jpg,尽管似乎有灰度jpg格式。
Pillow: 1 (200, 140)
OpenCV: (140, 200)
Run Code Online (Sandbox Code Playgroud)
Pillow 和 OpenCV 都说,这是一个灰度图像,ImageJ 也支持它。此外,枕头在此处使用模式'1',这反映在图像的抖动外观上。
Pillow: RGB (500, 333)
OpenCV: (333, 500, 3)
Run Code Online (Sandbox Code Playgroud)
那只是一些 RGB 图像;ImageJ 也这么说。
是的,很可能,您的大部分图像可能只是 RGB 图像。尽管如此,使用cv2.IMREAD_UNCHANGED至少会正确识别灰度png文件。如果jpg正确支持灰度文件,这是有问题的。
希望有帮助!
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
OpenCV: 4.2.0
Pillow: 7.0.0
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4594 次 |
| 最近记录: |