为什么灰度图像有3个通道

3
我正在对一张灰度图像执行操作,这些操作的结果图像与输入图像具有相同的扩展名。例如,如果输入图像是.jpg.png,则输出图像分别为.jpg.png
我将图像转换为灰度图像的方法如下:
ImgProc.cvtColor(mat, grayscale, ImgProc.COLOR_BGR2GRAY),

我正在使用以下方式检查频道数量:
.channels()

问题是当我想知道图像包含多少个通道时,尽管它是灰度图像,我总是收到通道数= 3的消息!请告诉我为什么会发生这种情况。

你是如何检查通道计数的?如果你是通过imread来做的,你是否指定了CV_LOAD_IMAGE_GRAYSCALE?默认情况下,你会得到BGR。 - Alex K.
@AlexK,请查看我上面的更新。 - user2121
1
为什么不尝试使用ImgProc.cvtColor(mat, grayscale, ImgProc.COLOR_BGR2GRAY,1)呢? - RealSkeptic
@RealSkeptic请告诉我,为什么在你的代码中最后一个参数是1? - user2121
1
因为它是确定输出通道数量的参数。 - RealSkeptic
@RealSkeptic Mat的类型是否有任何影响,我的意思是如果Mat的类型是CV_32F或CV_16U。请告诉我这些类型的含义是什么? - user2121
2个回答

2
颜色深度(或更好的称呼是色彩深度)是用于表示颜色值的位数。颜色深度为8通常意味着每个通道有8位(因此每个通道有256种颜色值 - 或者更好的说:灰度阶数- 从0到255),而3个通道意味着一个像素值由3 * 8 = 24位组成。
然而,这也取决于命名法。通常会说“颜色深度为8位每个通道”,但您还可以说“图像的颜色深度为32位”,并且指的是每个RGBA通道8位,或者说“图像具有24位的颜色深度”,并且指的是每个R、G和B通道8位。

谢谢您的回答。我有一个问题,请问当我显示Mat对象的类型时,我收到了5,并且我查看了文档,发现5可能意味着CV_16SC4!! 来自这里:http://docs.opencv.org/java/2.4.4/index.html?index-all.html 我是否理解错了? - user2121

0

灰度图像有三个通道,因为从技术上讲它不是一张灰度图像。实际上它是一张彩色图像,每个像素点的红、绿和蓝(RGB)三个通道的值都是相同的。因此,视觉上看起来像一张灰度图像。

要检查图像中的通道,请使用-

img.getbands()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接