可以建网站微信知彼网络网站建设
可以建网站,微信知彼网络网站建设,佛山出格建站,阿里巴巴外贸圈目录 一、多通道分离
1.1 函数原型
1.2 参数说明
二、多通道合并
2.1. 函数原型
2.2 参数说明
三、通道分离合并代码举例
四、通道增强应用代码举例
五、基于HSV色彩空间举例
5.1增强饱和度颜色更鲜艳
5.2更改H通道替换色调 一、多通道分离
1.1 函数原型
void cv:…目录一、多通道分离1.1 函数原型1.2 参数说明二、多通道合并2.1. 函数原型2.2 参数说明三、通道分离合并代码举例四、通道增强应用代码举例五、基于HSV色彩空间举例5.1增强饱和度颜色更鲜艳5.2更改H通道替换色调一、多通道分离1.1 函数原型void cv::split(InputArray m, OutputArrayOfArrays mv);1.2 参数说明m待分离的多通道图像如 3 通道 BGR 彩色图。mv分离后的输出是一个std::vectorcv::Mat其中每个元素是单通道图像顺序与原图像通道顺序一致例如 BGR 图像分离后mv[0]是 B 通道mv[1]是 G 通道mv[2]是 R 通道。二、多通道合并2.1. 函数原型void cv::merge(InputArrayOfArrays mv, OutputArray dst);2.2 参数说明mv需要合并的图像向量vectorMat所有输入图像必须尺寸相同、数据类型相同通道数可以是 1 或多通道。dst合并后的输出图像通道数等于所有输入图像通道数的总和例如 3 个单通道图像合并后得到 3 通道图像。三、通道分离合并代码举例以下是将lean图进行通道分离后单独将蓝色通道与全0的GR通道合并仅仅保留蓝色通道图片借助ImageShow进行调试。void testImageSplitAndMerge() { Mat image imread(R(D:\Study\OpenCvStudy\lean.jpg), ImreadModes::IMREAD_COLOR); Mat Images[3]; split(image, Images); Mat imageB Images[0]; Mat imageG Images[1]; Mat imageR Images[2]; Mat imageM; merge(Images, 3,imageM);//第二个参数向量维度 //只显示蓝色通道 Mat zeros Mat::zeros(Size(image.cols, image.rows),CV_8U); //Size(w,h); w col h row vectorMatimageV; imageV.push_back(imageB); imageV.push_back(zeros); imageV.push_back(zeros); Mat imageBm; merge(imageV, imageBm);//第二个参数向量维度 waitKey(); }四、通道增强应用代码举例以下以lean图的为例进行红色通道单独增强使得lean图更红更鲜艳。void testChannelEnforce() { // 1. 读取彩色图像OpenCV默认BGR顺序 Mat img imread(R(D:\Study\OpenCvStudy\lean.jpg)); if (img.empty()) { cout 图像读取失败请检查路径 endl; return; } // 2. 分离BGR通道split(多通道图像, 单通道向量) vectorMat channels; split(img, channels); // channels[0]B, channels[1]G, channels[2]R // 3. 增强红色通道R像素值乘以1.5提亮超过255则截断为255 // 注意需用convertTo避免溢出直接乘法可能导致数据溢出 Mat r_channel channels[2].clone(); // 复制红色通道避免修改原数据 r_channel.convertTo(r_channel, CV_8U, 1.5, 0); // 1.5倍亮度0偏移 // 4. 替换原红色通道 channels[2] r_channel; // 5. 合并通道merge(单通道向量, 输出多通道图像) Mat img_enhanced; merge(channels, img_enhanced); // 6. 显示结果 imshow(原始图像, img); imshow(红色通道增强后, img_enhanced); waitKey(0); }五、基于HSV色彩空间举例BGR 是 “硬件导向” 的颜色空间对应显示器三原色三个通道高度耦合调整一个通道会影响整体颜色而 HSV 是 “视觉导向” 的空间三个通道独立调整更符合人类的视觉感受。基于 HSV 的通道融合能实现 “只改饱和度不影响亮度”“只替换色调不影响纯度” 等精细化操作BGR调整单一 通道会影响亮度和色调等不符合人眼感受。5.1增强饱和度颜色更鲜艳int testHSVsplitMerage() { // 1. 读取图像并转为HSV空间 Mat img_bgr imread(R(D:\Study\OpenCvStudy\lean.jpg)); if (img_bgr.empty()) { cout 图像读取失败 endl; return -1; } Mat img_hsv; cvtColor(img_bgr, img_hsv, COLOR_BGR2HSV); // BGR转HSV是前提 // 2. 分离HSV通道h_channels[0]H, [1]S, [2]V vectorMat hsv_channels; split(img_hsv, hsv_channels); // 3. 增强S通道饱和度乘以1.8倍超过255则截断 Mat s_channel hsv_channels[1].clone(); s_channel.convertTo(s_channel, CV_8U, 1.8, 0); // 线性增强避免溢出 hsv_channels[1] s_channel; // 替换原S通道 // 4. 合并HSV通道转回BGR显示 Mat img_hsv_enhanced; merge(hsv_channels, img_hsv_enhanced); Mat img_result; cvtColor(img_hsv_enhanced, img_result, COLOR_HSV2BGR); // HSV转回BGR // 5. 显示对比 imshow(原始图像, img_bgr); imshow(饱和度增强后, img_result); waitKey(0); destroyAllWindows(); return 0; }5.2更改H通道替换色调将lean图中的 “红色” 替换为 “绿色”只改 H 通道保留 S/V达到绿巨人的效果。int testHSVsplitMerage2() { Mat img_bgr imread(R(D:\Study\OpenCvStudy\lean.jpg)); if (img_bgr.empty()) return -1; // 1. BGR转HSV Mat img_hsv; cvtColor(img_bgr, img_hsv, COLOR_BGR2HSV); // 2. 分离HSV通道 vectorMat hsv_channels; split(img_hsv, hsv_channels); Mat h_channel hsv_channels[0].clone(); // H通道0~179 // 3. 替换H通道红色H≈0~10→ 绿色H≈60 // 遍历每个像素将红色调的H值改为60 for (int y 0; y h_channel.rows; y) { uchar* row h_channel.ptruchar(y); for (int x 0; x h_channel.cols; x) { uchar h_val row[x]; // 红色的H范围0~10 或 170~179OpenCV中H0~179对应0°~360° if ((h_val 0 h_val 10) || (h_val 170 h_val 179)) { row[x] 60; // 改为绿色的H值 } } } // 4. 替换并合并通道 hsv_channels[0] h_channel; Mat img_hsv_new; merge(hsv_channels, img_hsv_new); // 5. HSV转回BGR Mat img_result; cvtColor(img_hsv_new, img_result, COLOR_HSV2BGR); // 6. 显示 imshow(原始红苹果, img_bgr); imshow(替换为绿苹果, img_result); waitKey(0); destroyAllWindows(); return 0; }