OpenCV 获取图像的通道数,实现单通道转3通道

本文介绍了一种将单通道图像转换为三通道图像的方法,并提供了详细的C++代码实现。该方法通过复制单通道图像三次并合并来创建三通道图像。此外,还展示了如何读取图像、检查图像通道数并显示图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <opencv2\opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
/*************************************************
//  Method:    convertTo3Channels
//  Description: 将单通道图像转为三通道图像
//  Returns:   cv::Mat
//  Parameter: binImg 单通道图像对象
*************************************************/
Mat convertTo3Channels(const Mat &binImg)
{
    Mat three_channel = Mat::zeros(binImg.rows,binImg.cols,CV_8UC3);
    vector<Mat> channels;
    for(int i = 0;i < 3; i ++)
    {
        channels.push_back(binImg);
    }
    merge(channels,three_channel);
    return three_channel;
}

int main() 
{
	Mat src;
	src = imread("D:/lena.png");
	if (src.empty()) {
		printf("could not find the picture!");
		return-1;
	}
 
	//方法1
	int height = src.rows;//row表示行,rows表示行的总数,即图像的高
	int width = src.cols;//col表示列,cols表示列的总数,即图像的宽
	//方法2
	cout<<src.size()<<endl;
	//获取通道数
	int channels = src.channels();
	//打印输出
	printf("height=%d width=%d channels=%d", height, width, channels);
 
	if(channels != 3)
    {
       Mat three_channels = convertTo3Channels(src);
       imshow("dst",three_channels);
    }else
        imshow("dst",src);
	waitKey(0);
	return 0;
}

### 使用OpenCV实现图像通道处理 在计算机视觉领域,暗通道先验是一种用于去除图像雾霾的有效方法。对于给定的RGB彩色图像,暗通道是指每个像素位置处三个颜色通道中的最小值组成的单通道图像。这一概念被用来估计大气光散射模型下的透射率。 为了使用OpenCV获取图像的暗通道,可以通过以下Python代码片段展示具体过程: ```python import cv2 import numpy as np def get_dark_channel(img, w_size=15): """计算输入图像img的暗通道""" # 将BGR格式换成灰度图像是不必要的;我们需要的是各通道分别求最小值 min_channels = cv2.min(cv2.min(img[:, :, 0], img[:, :, 1]), img[:, :, 2]) # 对每一个像素点,在其w_size*w_size邻域内寻找最小值作为该点的暗通道值 dark_channel = cv2.erode(min_channels, np.ones((w_size, w_size), dtype=np.uint8)) return dark_channel ``` 上述代码定义了一个`get_dark_channel()`函数,接受两个参数:一个是待处理的三通道(BGR)图像`img`,另一个是窗口大小`w_size`,默认设置为15×15。此函数首先找到每个像素对应R/G/B三个分量里的最小值形成新的二维数组,接着采用形态学腐蚀操作模拟局部最小化运算,从而获得最终的暗通道图像[^4]。 值得注意的是,这里的实现采用了OpenCV库提供的`cv2.erode()`函数代替了传统意义上的滑动窗口遍历方式来加速计算效率并简化编码复杂度。此外,由于OpenCV读入图片时默认按BGR顺序存储色彩信息,因此上面的例子也遵循这种约定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值