精华内容
下载资源
问答
  • opencv 通道分离合并

    千次阅读 2017-08-29 09:10:36
    opencv 通道分离合并



    import matplotlib.pyplot as plot
    def show_data(r,g,b,a,img):
        fig = plot.figure()
        ax = fig.add_subplot(321)
        ax.imshow(r, cmap='Greys_r')
        ax2 = fig.add_subplot(322)
        ax2.imshow(g)
        a3 = fig.add_subplot(323)
        a3.imshow(b)
        a4 = fig.add_subplot(324)
        a4.imshow(a)
        a4 = f
    展开全文
  • Opencv 通道分离与合并 split() merge() 我有一个梦想,我写的代码,可以像诗一样优美。我有一个梦想,我做的设计,能恰到好处,既不过度,也无不足。 opencv 提供了split()函数和merge()函数,目的是将一个多通道...

    Opencv 通道分离与合并 split() merge()

    我有一个梦想,我写的代码,可以像诗一样优美。我有一个梦想,我做的设计,能恰到好处,既不过度,也无不足。

    opencv 提供了split()函数和merge()函数,目的是将一个多通道数组分离成几个单通道数组以及将几个数组合并成为一个数组。

    此函数相对简单,主要了解OPencv的彩色空间顺序为:蓝绿红, 以及相关参数的要求即可。
    下面将简单演示:

    //ps: 为方便演示,以下数组深度均为CV_8U
    void mySplit(Mat mat, std::vector<Mat> &matVec)
    {
    	if (!mat.data || mat.type() != CV_8UC3)
    	{
    		return;
    	}
    	int channels = mat.channels();
    
    	matVec.clear();
    	for (int i = 0; i < channels; i++)
    	{
    		Mat mat1(mat.size(), CV_8UC1);
    		matVec.push_back(mat1);
    	}
    
    	for (int i = 0; i < mat.rows; i++)
    	{
    		for (int j = 0; j < mat.cols; j++)
    		{
    			for (int n = 0; n < channels; n++)
    			{
    				matVec[n].at<uchar>(i, j) = mat.at<Vec3b>(i, j)[n];
    			}
    		}
    	}
    }
    
    void myMerge(Mat& mat, std::vector<Mat> &matVec)
    {
    	if (matVec.empty())
    	{
    		return;
    	}
    	for (int i = 0; i < matVec.size(); i++)
    	{
    		if (matVec.at(i).channels() != 1 || matVec.at(i).type() != CV_8UC1)
    		{
    			return;
    		}
    	}
    
    	mat.create(matVec.at(0).size(), CV_8UC3);
    	for (int i = 0; i < mat.rows; i++)
    	{
    		for (int j = 0; j < mat.cols; j++)
    		{
    			for (int n = 0; n < matVec.size(); n++)
    			{
    				mat.at<Vec3b>(i, j)[n] = matVec[n].at<uchar>(i, j);
    			}			
    		}		
    	}
    }
    
    int main()
    {
        Mat mat(5, 5, CV_8UC3);
    	randu(mat, Scalar(0), Scalar(255));
    
    	std::vector<Mat> matVec1, matVec2;
    	split(mat, matVec1);
    	mySplit(mat, matVec2);
    	if (matVec2.empty())
    	{
    		return -1;
    	}
    	Mat temp1 = matVec1[0] - matVec2[0];
    	Mat temp2 = matVec1[1] - matVec2[1];
    	Mat temp3 = matVec1[2] - matVec2[2];
    
    	cout << temp1 << endl;
    	cout << temp2 << endl;
    	cout << temp3 << endl;
    
    	Mat mat2, mat3;
    	merge(matVec1, mat2);
    	myMerge(mat3, matVec2);
    	Mat temp = mat2 - mat3;
    	cout << temp << endl;
    	getchar();
        return 0;
    }
    

    运行结果:

    [  0,   0,   0,   0,   0;
       0,   0,   0,   0,   0;
       0,   0,   0,   0,   0;
       0,   0,   0,   0,   0;
       0,   0,   0,   0,   0]
    [  0,   0,   0,   0,   0;
       0,   0,   0,   0,   0;
       0,   0,   0,   0,   0;
       0,   0,   0,   0,   0;
       0,   0,   0,   0,   0]
    [  0,   0,   0,   0,   0;
       0,   0,   0,   0,   0;
       0,   0,   0,   0,   0;
       0,   0,   0,   0,   0;
       0,   0,   0,   0,   0]
    [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0;
       0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0;
       0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0;
       0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0;
       0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0]
    
    
    
    
    展开全文
  • Python_OpenCV通道分离

    2021-04-02 17:32:01
    参考:OpenCV-python之通道分离和合并 import cv2 import numpy as np img = cv2.imread("test.bmp") b, g, r = cv2.split(img) '''如果只想返回其中一个通道: b = cv2.split(img)[0] g = cv2.split(img)...

    参考:OpenCV-python之通道的分离和合并

    import cv2
    import numpy as np
    
    img = cv2.imread("test.bmp")
    
    b, g, r = cv2.split(img) 
    '''如果只想返回其中一个通道:
       b = cv2.split(img)[0]
       g = cv2.split(img)[1]
       r = cv2.split(img)[2]
    '''
    
    cv2.imshow("R", r)
    cv2.imshow("G", g)
    cv2.imshow("B", b)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    跟C++里还是一个屌样

    展开全文
  • OpenCV中split()函数用于将一个多通道数组分离成几个单通道数组; merge()函数是split()函数的逆向操作,将多个数组合并成一个多通道的数组。通过组合一些给定的单通道数组,将这些孤立的单通道数组合并组合成一...

    在OpenCV中split()函数用于将一个多通道数组分离成几个单通道数组;

    merge()函数是split()函数的逆向操作,将多个数组合并成一个多通道的数组。通过组合一些给定的单通道数组,将这些孤立的单通道数组合并组合成一个多通道的数组,从而创建出一个由多通道阵列组成的多通道阵列。

    一、代码:

    //------------------------------------------------------------------------------------------------
    //多通道分离split()函数和多通道混合merge()函数
    //----------------------------【头文件、命名空间包含部分】--------------------------------
    
    //----------------------------描述:包含程序所使用的头文件和命名空间
    #include <opencv2/opencv.hpp>
    //#include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    //#include <opencv2/imgproc/imgproc.hpp>
    #include <iostream>
    using namespace cv;
    using namespace std;
    
    
    //----------------------------【全局变量声明部分】----------------------------
    //描述:全局函数声明
    bool MultiChannelBlending();
    
    
    //----------------------------【main函数】----------------------------
    int main()
    {
    	if (MultiChannelBlending())
    	{
    		cout << "运行成功" << endl;
    	}
    	
    	//按任意键退出
    	waitKey(0);
    
    	return 0;
    }
    
    
    //----------------------------【MultiChannelBlending()函数】----------------------------
    //描述:多通道混合的实现函数
    bool MultiChannelBlending()
    {
    	//定义相关变量
    	Mat srcImage;
    	Mat logoImage;
    	vector<Mat> channels;
    	Mat imageBlueChannel;    //定义蓝色通道
    
    	//读入图片
    	srcImage = imread("F:\\TuPian\\dotasrc.jpg");
    	if (srcImage.data == NULL)
    	{
    		cout << "读取源图像错误!" << endl;
    	}
    
    	logoImage = imread("F:\\TuPian\\dota_logo.jpg",0); //参数0表示读入灰度图像
    	if (logoImage.data == NULL)
    	{
    		cout << "读取logo错误!" << endl;
    	}
    
    	//利用split()函数将一个3通道图像转换成3个单通道图像
    	split(srcImage, channels);    // 分离彩色通道
    
    	//将原图的蓝色通道引用返回给imageBlueChannel,注意是引用,相当于两者等价,修改其中一个另一个跟着变
    	imageBlueChannel = channels.at(0);    //channels.at(1)是绿色通道,channels.at(2)是红色通道
    
    	//将原图的蓝色通道的(500,250)坐标处右下方的一块区域和logo图进行加强操作,将得到的混合结果保存到imageBlueChannel中
    	addWeighted(imageBlueChannel(Rect(500, 250, logoImage.cols, logoImage.rows)), 1.0, logoImage, 0.5, 0, imageBlueChannel(Rect(500, 250, logoImage.cols, logoImage.rows)));
    	//void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);
    	//dst = src1[I]*alpha + src2[I]*beta + gamma;
    
    	//利用merge()函数将3个通道重新合成一个三通道
    	merge(channels, srcImage);
    
    	//显示效果图
    	const char* name = "游戏原画+logo蓝色通道";
    	cv::namedWindow(name);
    	cv::imshow(name, srcImage);
    
    	return true;
    }

    二、结果:

     

    参考: 参考:《OpenCV3编程入门》毛星云、冷雪飞等编著,电子工业出版社,2018年11月第19次印刷,p125-130。

     

    展开全文
  • opencv 通道分离(split)与合并(merge)

    万次阅读 2019-09-20 11:45:55
    通道分离 void cv::split( const cv::Mat& mtx, //输入图像 vector<Mat>& mv // 输出的多通道序列(n个单通道序列) ); 通道合并 void cv::split( const cv::Mat& mtx, //输入图像 vector<...
  • //要求单通道图像才能直方图均衡化 } //通道分离 cvSplit( src, imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3] ); for( i = 0; i < dst -> nChannels; i++ ) { //直方图均衡化,...
  • 5.通道分离和合并 通道的分离(split()函数)和合并(merge()函数) 5.1通道分离函数cv2.split()函数的使用 import numpy as np; import cv2; #导入opencv模块 image=cv2.imread("/home/zje/Pictures/lena....
  • Opencv-通道分离与合并

    2019-09-07 10:43:23
    OpenCV中默认imread函数加载图像文件,加载进来的是三通道彩色图像,色彩空间是RGB色彩空间、通道顺序是BGR(蓝色、绿色、红色)、对于三通道的图像OpenCV中提供了两个API函数用以实现通道分离与合并。 split // ...
  • OpenCv色彩通道分离与融合 1、函数介绍 split–分离 merge—融合 2、代码 import numpy as np import cv2 image=cv2.imread('cat1.jpg') (B,G,R)=cv2.split(image) merged=cv2.merge([B,G,R]) cv2.imshow("Red",...
  • opencv通道分离和合并 通道分离 void split(const Mat& src, Mat* mvbegin); void split(InputArray m, OutputArrayOfArrays mv); 通道合并 void merge(const Mat* mv, size_t count, OutputArray dst); ...
  • 基本思想:因为考试华为中级AI需要,简单记录一下复习的图像知识,使用OpenCV进行像素通道分离和合并 #include<opencv2/opencv.hpp> #include<iostream> #include<vector> using ...
  • 通道分离split void split(const Mat& src, Mat* mvbegin); void split(InputArray m, OutputArrayOfArrays mv); src:待分离的多通道图像。 mvbegin:分离后的单通道图像,为数组形式,数组大小需要与图像的通道数...
  • OpenCV-通道分离cv::split

    万次阅读 多人点赞 2021-06-05 12:46:46
    } 测试效果 图1 图像三通道数据示意图 图2 图像单通道数据示意图 图3 单通道处理后的效果图 如上图所示,图像一般是三通道的矩阵数据,通道分离后,三个通道分别成为一个灰度图像,对蓝色通道数据除以2,相当于...
  • opencv2/opencv.hpp> #include <iostream> #include <vector> using namespace std; using namespace cv; int main(int argc, char **argv) { Mat img = imread("lena.png"); if(img.empty()) ...
  • python OpenCV 图像通道分离和合并

    千次阅读 2018-04-09 23:00:04
    图像通道分离有两种方法,一个是使用OpenCV自带的split 函数,还有一个是使用Numpy数组来分离通道.使用OpenCV 自带 split函数[python]view plaincopy#!/usr/bin/envpython#encoding:utf-8importcv2...
  • #define _CRT_SECURE_NO_WARNINGS #include <iostream>...opencv2\opencv.hpp> using namespace std; using namespace cv; int main() { Mat img = imread("E:/test/MySource/OpenCV/1.jpg...
  • OpenCV分离图像通道

    2017-01-10 16:40:08
    opencv的imread函数读取的灰度图是单...opencv分离图像通道: 源码: Mat img = imread("D:/1.jpg",1); Mat imgR,imgG,imgB; vector channels; split(img,channels); imgR = channels.at(0); imgG = chann
  • opencv分离RGB三通道

    2016-10-20 21:26:36
    使用opencv对彩色图像进行RGB三通道分离
  • 利用opencv 实现彩色图像的通道分离和混合。
  • opencv-通道分离和合并

    2019-01-29 20:14:14
    通道分离: void split(const Mat&amp;src,Matmvbegin); (1)填需要分离的多通道数组 (2)填函数的输出数组或者输出的vector容器 通道合并: void merge(const Matmv,size_tcount,outputarray dst); 或者void ...
  • 这篇博客我们来学习opencv通道分离与合并(split,merge)两个函数: 一、知识点 OpenCV中默认imread函数加载图像文件,加载进来的是三通道彩色图像,色彩空间是RGB色彩空间、通道顺序是BGR(蓝色、绿色、红色)、...
  • OpenCV_Mat颜色通道分离_各通道合成以及图显示,包含详细代码及注释。
  • 2016年01月09日 22:20:41 无敌三角猫 阅读数:1911 标签: 通道分离OpenCVRGB分别求平均 更多 个人分类: 图像处理-OpenCV 原文地址:http://blog.csdn.net/xiaowei_cqu/article/details/7558657/ 【1】...
  • 图像的通道分离本质是对数组的切片,因为将图像读取是将图像的高度,宽度,通道数以三维数组的形式存储 图像颜色通道分离对于B,G,R值的提取对于只保留B,G,R图像的提取完整代码 对于B,G,R值的提取 对于B,G,R值的提取...
  • 图像通道分离 有两种方法,一个是使用OpenCV自带的split 函数,还有一个是使用Numpy数组来分离通道. 使用OpenCV 自带 split函数 [python]&amp;nbsp;view plain&amp;nbsp;copy ...
  • 利用split和merge两个函数数,借助于vector向量类型的channel来实现图像多通道分离和组合: #include&lt;cv.h&gt; #include&lt;highgui.h&gt; #include&lt;iostream&gt; #include&...
  • opencv RGB三通道分离

    千次阅读 2016-11-26 16:30:43
    如果我们想分离出每个通道的具体值,并且可以演示看出分离的是“红”“绿”“蓝”的效果。可以用如下函数: 1、C接口程序: IplImage* img = cvLoadImage("baboon.jpg"); IplImage* rImg=cvCreateImage...
  • ##名称:分离颜色通道&多通道图像混合 ##平台:QT5.7.1+OpenCV3.2.0 ##时间:2017年12月11日 /***************创建QT控制台程序*******************/ #include <QCoreApplication> #include <...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,450
精华内容 2,180
关键字:

opencv通道分离