OpenCV——RGB三通道分离

opencv 和 matlab 在处理彩色图像的时候,通道的存储顺序是不同的。

matlab 的排列顺序是R,G,B; 而在opencv中,排列顺序是B,G,R。

下面通过一个小程序看看opencv中的三个通道。

// PS_Algorithm.h

#ifndef PS_ALGORITHM_H_INCLUDED

#define PS_ALGORITHM_H_INCLUDED

#include <iostream>

#include <string>

#include "cv.h"

#include "highgui.h"

#include "cxmat.hpp"

#include "cxcore.hpp"

using namespace std;

using namespace cv;

#endif // PS_ALGORITHM_H_INCLUDED

// Public_Function.h

#ifndef PUBLIC_FUNCTION_H_INCLUDED

#define PUBLIC_FUNCTION_H_INCLUDED

#include <iostream>

#include <string>

#include "cv.h"

#include "highgui.h"

#include "cxmat.hpp"

#include "cxcore.hpp"

using namespace std;

using namespace cv;

void Show_Image(Mat&, const string &);

void Save_Image(Mat&, const string &);

#endif // PUBLIC_FUNCTION_H_INCLUDED

/*

The program will Divides multi-channel array

into several single-channel arrays.

We can get the single-channel from a multi-channel

image.

*/

#include "PS_Algorithm.h"

#include "Public_Function.h"

using namespace std;

using namespace cv;

int main()

{

string Img_name("4.jpg");

Mat Image_in;

Image_in=imread(Img_name);

Show_Image(Image_in, Img_name);

// convert the type of the image.

// from the uchar to the float.

Mat Image_2(Image_in.size(), CV_32FC3);

Image_in.convertTo( Image_2, CV_32FC3);

Mat r(Image_in.rows, Image_in.cols, CV_32FC1);

Mat g(Image_in.rows, Image_in.cols, CV_32FC1);

Mat b(Image_in.rows, Image_in.cols, CV_32FC1);

Mat out[]={b,g,r};

split(Image_2, out);

// 三个通道的顺序是 b,g,r.

b=out[0]/255;

g=out[1]/255;

r=out[2]/255;

Show_Image(g, "g");

waitKey();

}

原图

R 通道

G 通道

B 通道

时间: 2024-10-16 02:16:30

OpenCV——RGB三通道分离的相关文章

多通道(比方RGB三通道)卷积过程

今天一个同学问 卷积过程好像是对 一个通道的图像进行卷积, 比方10个卷积核,得到10个feature map, 那么输入图像为RGB三个通道呢,输出就为 30个feature map 吗, 答案肯定不是的, 输出的个数依旧是 卷积核的个数. 能够查看经常使用模型.比方lenet 手写体,Alex imagenet 模型, 每一层输出feature map 个数 就是该层卷积核的个数. 1. 一通道单个卷积核卷积过程 2. 一通道 多个卷积核卷积过程 一个卷积核得到的特征提取是不充分的.我们能够

opencv图像混合,分离颜色通道、多通道图像混合

1 计算数组加权和用addWeighted函数,作用是计算两个数组(图像阵列)的加权和.原型如下: void addweighted(InputArray srcl,double alpha,InputArray src2,double beta,double gamma,OutputArray dst,int dtype=-1); uploading-image-436808.png 2 对RGB三个颜色通道的分量进行分别显示和调整用opencv中的split和merge split是将一个多

DAY13 彩色图片分别显示RGB三个通道图片 求图像的均值 方差 熵

% 读取一张彩色图片 分别显示RGB三个通道图片% 将彩色图片换成灰度图像 求图像的均值 方差 熵im=(imread('robot.jpg'));figure,imshow(im); % Step1 分别显示RGB三个通道图片subplot(2,2 ,1),imshow(im); %原始彩色图像subplot(2, 2 ,2),imshow(im(:,:,1)); %R通道 im(:,:,1) 表示三维图像 第一个参数表示获取全部行subplot(2 ,2 ,3),imshow(im(:,:,

opencv学习之路(9)、对比度亮度调整与通道分离

一.对比度亮度调整 1 #include<opencv2/opencv.hpp> 2 using namespace cv; 3 4 #define WIN_NAME "输出图像" 5 Mat src,dst; 6 int contrast=20,bright=20; 7 8 void onChange(int,void*){ 9 for (int i = 0; i < src.rows; i++) 10 { 11 for (int j = 0; j < src

opencv之通道分离和合并

opencv之通道分离和合并 通道分离 void split(const Mat& src, Mat* mvbegin); void split(InputArray m, OutputArrayOfArrays mv); 通道合并 void merge(const Mat* mv, size_t count, OutputArray dst); void merge(InputArrayOfArrays mv, OutputArray dst); 实例 #include <opencv2/

Canny,先Scharr得梯度再Canny,三通道黑色背景展示结果(OpenCV案例源码edge.cpp)

有所更改,参数不求完备,但求实用.源码参考D:\source\opencv-3.4.9\samples\cpp\edge.cpp #include<opencv2\opencv.hpp> #include<iostream> using namespace cv; using namespace std; int edgeThresh = 1; int edgeThreshScharr = 1; Mat image, gray, blurImage, edge1, edge2, c

HSV做通道分离是出现的Vector内存越界错误

vector<Mat> hsvSplit; //因为我们读取的是彩色图,直方图均衡化需要在HSV空间做 split(imgHSV, hsvSplit); equalizeHist(hsvSplit[2], hsvSplit[2]); merge(hsvSplit, imgHSV); 用上面的代码做HSV通道分离的时候,出现Vector内存越界的情况 解决方案一: vector<Mat> hsvSplit; //因为我们读取的是彩色图,直方图均衡化需要在HSV空间做 hsvSplit

STM32F10x_ADC三通道DMA连续转换(3通道、软件单次触发)

Ⅰ.概述 上一篇文章讲述的内容是:三通道逐次转换(单次.单通道软件触发),也就是说3条通道要三次软件触发才能完成转换,而且是通过软件读取转换数值. 本文讲述三通道DMA连续转换(3通道.软件单次触发),也就是说3条通道只需要一次软件触发就能完成转换,使用DMA保存在数值. 上一篇文章实例是使用间断模式单次触发单条通道采集,本文是使用DMA模式单次触发三条通道采集.使用DMA传输的好处就是效率很高,我们直接读取转换的结果就是了,比如想做的示波器实例就是要求效率很高. 实例实验效果: 本文的实验效果

OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)

前文曾具体探讨了关于OpenCV的使用,原本以为天下已太平.但不断有人反应依旧配不好OpenCV4Android,不能得心应手的在Android上使用OpenCV.大量的精力都浪费在摸索配置上.尤其是OpenCVManager诞生之后.更让人无语.大家第一个反应就是怎样才干不安装OpenCVManager.由于要多安装这个东西对客户来说体验太不好了. 咱家昨夜研究至两点,今早七点起床.最终把头绪理清了. 以下咱家以之前做过的一个基于OpenCV2.3.1.android通过jni调用opencv