DrGraph原理示教 - OpenCV 4 功能 - 单通道图
2023-12-31 11:31:48
通道
OpenCV的核心处理对象是Mat,大体是一个二维数组,加上了各种功能函数。
很多的图像处理,会在单通道或二值化的基础上进行,比如连通域、目标识别等。这里的通道就是channels。
不同的图像处理算法可能对通道数有特定的要求。例如,一些算法可能只能处理单通道图像,而其他算法可能可以利用多通道图像中的信息来实现更复杂的处理。
在OpenCV中,Mat类的channels实际上和每个元素上存储的数据有关,例如存储的是Point3f,channel就自动为3。具体来说,图像是由一个个像素点堆积而成的,而一个像素点,又是由RGB颜色混合而成的。每一种颜色就是一种通道,每个像素点是多个通道颜色的混合结果。
使用Mat.channels()方法可以得到当前Mat的通道数,通常返回结果值为1、2、3或4。
在OpenCV中,除了使用Mat.channels()方法,还可以通过以下方法获取图像的通道数:
- 通过图像属性查看:在图像的详细信息中,如果位深度为8,则为单通道(灰度图);位深度为24是三通道;位深度为32是四通道。
- 使用img.shape()[2]方法:该方法返回图像的通道数,其中img.shape()表示图像的维度,索引为2的元素为通道数。
那就简单理解。
OpenCV 处理
当然,对编程来说,光知道通道数是多少,并没有什么大用,应该要取得某个通道的图像才是目的,这也是各图像的内在本质。
OpenCV中,获取各通道图像是采用split函数
std::vector<cv::Mat> channels;
split(dstMat, channels);
dstMat = channels[channelType];
split的参数很简单,无需折腾。如果非要加参数的话,那就是通道序号。
灰度图
而灰度图也是单通道的,不过它的数据是由RGB分量计算而得,不是取得其中一个。
从数学的角度来看,结果都是 f(R, G, B, A),单通道是R/G/B/A中的一个,灰度是其余逻辑,如0.299×R+0.587G+0.114B
那就一块处理了。
文章来源:https://blog.csdn.net/drgraph/article/details/135313768
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!