注:本文非标准教程,仅是总结个人学习过程,可能存在纰漏,如有错误之处欢迎留言告知,非常感谢

本文用RGB通道来改变图像颜色。

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>using namespace std;
using namespace cv;
int R = 10, G = 10, B = 10;
static Mat frame;
//1//
//1//
//2//
vector<Mat> channels;
Mat channels1, channels2, channels3;
Mat img_color_channel;
vector<Mat> newChannels;//2//
static void callbackAdjust(int, void *);
int main()
{frame = imread("1.jpg");//2//split(frame, channels);channels1 = channels[0];//获取通道1channels2 = channels[1];//获取通道2channels3 = channels[2];//获取通道3//2//namedWindow("test");createTrackbar("R", "test", &R, 255, callbackAdjust);createTrackbar("G", "test", &G, 255, callbackAdjust);createTrackbar("B", "test", &B, 255, callbackAdjust);/*for (;;){*///cap >> frame;imshow("src", frame);callbackAdjust(0, 0);waitKey(0);
//}return 0;
}//static void callbackAdjust(int, void *)
//{//  //2//
//  for (int i = 0; i < frame.rows; i++)
//  {//      for (int j = 0; j < frame.cols; j++)
//      {//          channels3.at<Vec3b>(i, j)[0] += B;
//          channels2.at<Vec3b>(i, j)[1] += G;
//          channels1.at<Vec3b>(i, j)[2] += R;
//      }
//  }
//  newChannels.push_back(channels3);
//  newChannels.push_back(channels2);
//  newChannels.push_back(channels1);
//  merge(newChannels, img_color_channel);
//  imshow("test", img_color_channel);
//  //2//
//}static void callbackAdjust(int , void *)
{Mat img_color_channel(frame.rows, frame.cols, CV_8UC3);for (int i = 0; i < frame.rows; i++){for (int j = 0; j < frame.cols; j++){img_color_channel.at<Vec3b>(i,j)[2] = frame.at<Vec3b>(i,j)[2] ;img_color_channel.at<Vec3b>(i,j)[1] = frame.at<Vec3b>(i,j)[1] ;img_color_channel.at<Vec3b>(i,j)[0] = frame.at<Vec3b>(i,j)[0] ;}}for (int i = 0; i < frame.rows; i++){for (int j = 0; j < frame.cols; j++){img_color_channel.at<Vec3b>(i,j)[2] += R ;img_color_channel.at<Vec3b>(i,j)[1] += G ;img_color_channel.at<Vec3b>(i,j)[0] += B ;}}imshow("test", img_color_channel);
}


emmmmm炸了。。

所以改代码。。。。。。

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>using namespace std;
using namespace cv;int aSlider_1, aSlider_2, aSlider_3;
double Blue, Green, Red;
int Max = 100;void on_Trackbar_1(int, void*)
{Blue = (double)aSlider_1;
}
void on_Trackbar_2(int, void*)
{Green = (double)aSlider_2;
}
void on_Trackbar_3(int, void*)
{Red = (double)aSlider_3;
}bool MultiChannelBlending()
{while (1){Mat frame=imread("1.jpg");Mat temp1(frame.rows, frame.cols, CV_8UC3, Scalar(0, 0, 0));Mat temp2(frame.rows, frame.cols, CV_8UC3, Scalar(0, 0, 0));Mat temp3(frame.rows, frame.cols, CV_8UC3, Scalar(0, 0, 0));Mat temp4(frame.rows, frame.cols, CV_8UC3, Scalar(0, 0, 0));createTrackbar("蓝%d", "red", &aSlider_1, Max, on_Trackbar_1);createTrackbar("绿%d", "red", &aSlider_2, Max, on_Trackbar_2);createTrackbar("红%d", "red", &aSlider_3, Max, on_Trackbar_3);for (int i = 0; i < frame.rows; i++){for (int j = 0; j < frame.cols; j++){int red = frame.at<Vec3b>(i, j)[2];temp1.at<Vec3b>(i, j)[2] = red * Red / Max;int blue = frame.at<Vec3b>(i, j)[0];temp1.at<Vec3b>(i, j)[0] = blue * Blue / Max;int green = frame.at<Vec3b>(i, j)[1];temp1.at<Vec3b>(i, j)[1] = green * Green / Max;}}on_Trackbar_1(aSlider_1, 0);on_Trackbar_2(aSlider_2, 0);on_Trackbar_3(aSlider_3, 0);imshow("girlfriend", temp1);imshow("girlfriend", frame);int num = waitKey(1);if ((char)num == 30)break;}return 0;
}
int main()
{if (MultiChannelBlending()){cout << endl << "\n!";}waitKey(0);
}

opencv分离RGB三通道相关推荐

  1. 【Opencv入门】RGB三通道直方图的计算与绘制

    文章目录 一. 直方图概述 Overview of histogram 二.直方图的建立 Establishment of histogram 三.直方图的作用 The function of his ...

  2. 彩色图像RGB三通道问题探究

    之前做图像问题研究时经常会提到RGB通道,这次做一个小研究,对最底层的东西深究一二-- 直接上全部代码吧,一点点来: # -*- coding: utf-8 -*- import cv2 img=cv ...

  3. BMP位图转为RGB三通道图

    文章目录 读取BMP位图转为RGB三通道图 注意 相关/参考链接 本人机器开发环境 用到的图像 大小端模式介绍: 完整代码: 结果 读取BMP位图转为RGB三通道图 个人总结,目的是给自己日后参考,或 ...

  4. PIL将png的RGBA四通道改为jpg的RGB三通道方法

    将一张png图像使用PIL读入的时候,发现是一个四通道图像,即:RGBA,分别代表Red(红色)Green(绿色)Blue(蓝色)和Alpha的色彩空间.其中Alpha通道一般用做透明度参数,这就是为 ...

  5. 提取图片RGB三通道数据+用RGB恢复原始图片

    提取图片的RGB三通道数据+用RGB恢复原始图片 提取图片的RGB三通道数据 用RGB恢复原始图片 功能实现: 提取出一张图片的R.G.B三个通道的值并且将其分别转换为十进制数据存储到R.txt.G. ...

  6. OpenCV——RGB三通道分离

    opencv 和 matlab 在处理彩色图像的时候,通道的存储顺序是不同的. matlab 的排列顺序是R,G,B: 而在opencv中,排列顺序是B,G,R. 下面通过一个小程序看看opencv中 ...

  7. opencv RGB三通道分离

    如果我们想分离出每个通道的具体值,并且可以演示看出分离的是"红""绿""蓝"的效果.可以用如下函数: 1.C接口程序: IplImage* ...

  8. tensorflow RGB三通道图转换为灰度图

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Blue_Ghost_/article/details/81977987 </div>&l ...

  9. 带alpha通道四通道的图片转成rgb三通道

    查看第四通道数值范围,若最大值为255,则归一化到1,再与前三通道相乘,得到叠加透明度的结果

最新文章

  1. 大而强 VS 小而美 | 史晓东、周明等共论:大模型主导的时代,NLP 该如何演进?...
  2. 开发部署提速8倍!这款IDE插件了解一下?
  3. LeetCode--023--合并K个排序链表
  4. BroadCastReceiver简介
  5. android 命令启动服务,adb 命令
  6. c++ 无法读取内存_Linux内存机制以及手动释放swap和buffer和cache
  7. 浙江大学PTA 数据结构 习题2.2 数组循环左移 (20 分)
  8. WPF中的图像处理简介
  9. 读书节第三日丨产品大咖荐读直播齐上阵,学院超级会员限时开抢!
  10. RabbitMQ系列(七)--批量消息和延时消息
  11. 分享一个高清壁纸网站
  12. schedule和scheduleAtFixedRate
  13. win10 多开 vpn
  14. Matlab实现图像识别(九)
  15. 计算机包含几个语素几个词,英语一词有几个语素
  16. 关键词提取:TF-IDF和n-gram
  17. openldap sssd服务认证登录
  18. JAVA 生成二维码并保存到本地或文件服务器
  19. 《管理的常识》读书笔记
  20. 关于图像opencv中对于长宽的定义

热门文章

  1. ORB-SLAM2(2) ROS下配置和编译
  2. Oracle Functions快速入门
  3. idea很带劲的插件
  4. 基于二哈实现多人人脸学习和识别
  5. 面向对象,数据库交互的Spring-boot(新手)
  6. 【视频】马尔可夫链蒙特卡罗方法MCMC原理与R语言实现|数据分享
  7. AI动物识别专家系统-实验报告
  8. 【环境搭建】手把手教你安装Ubuntu16.04系统
  9. echarts饼图设置每个扇形的颜色
  10. 403错误(已解决)