多通道矩阵的分离与聚合

 1 #include<opencv2/opencv.hpp>  
 2 #include<iostream>  
 3 #include<cassert>  
 4 #include<vector>  
 5 #include<stdio.h>
 6 #include <sys/time.h>
 7 
 8 using namespace cv;  
 9 using namespace std; 
10 
11 int main(int argc, char** argv)
12 {
13     Mat srcImage=imread(argv[1], CV_LOAD_IMAGE_COLOR);  
14     printf("srcImage-data address:%p
", srcImage.data);
15     Mat m = srcImage.clone(); 
16     printf("m-data address:%p
", m.data);
17     cout << "m.depth:" << m.depth() << endl;
18     cout << "m.type:" << m.type() << "-" << CV_8UC3 << endl;
19 
20     Mat m_64;
21     m.convertTo(m_64, CV_64FC3);
22     printf("m_64-data address:%p
", m_64.data);
23     cout << "m_64.depth:" << m_64.depth() << endl;
24     cout << "m_64.type:" << m_64.type() <<"-" << CV_64FC3 << endl;
25 
26     Mat m_8;
27     m_64.convertTo(m_8, CV_8UC3);
28     printf("m_8-data address:%p
", m_8.data);
29     cout << "m_8.depth:" << m_8.depth() << endl;
30     cout << "m_8.type:" << m_8.type() <<"-" << CV_8UC3 << endl;
31 
32     //cout << m_64 << endl;
33     cout << m_8 << endl;
34 
35 
36     //result:convertTo转换data会存储在新的地方
37     //srcImage-data address:0x7fa6ac1bb020
38         //m-data address:0x7fa6ac0fa020
39         //m.depth:0
40         //m.type:16-16
41         //m_64-data address:0x7fa69dcba020
42         //m_64.depth:6
43         //m_64.type:22-22
44         //m_8-data address:0x7fa69dbf9020
45         //m_8.depth:0
46         //m_8.type:16-16
47 
48     vector<Mat> channels;
49     Mat imageBlue,imageGreen,imageRed;
50     Mat mergeImage;
51 
52     split(m, channels);  
53     imageBlue = channels.at(0);  
54 
55     for (int i = 0; i < imageBlue.rows; i++)
56         for (int j = 0; j < imageBlue.cols; j++)
57         {
58             imageBlue.at<uchar>(i, j) = i;
59         }
60 
61     imageGreen = channels.at(1);  
62     imageRed = channels.at(2);  
63     merge(channels, m);  
64 
65     //result:67     //m-data address:0x7f8058621020
68 
69     //cout << srcImage << endl;
70     //cout << m << endl;
71     //cout << mergeImage << endl;
72     cout << endl;
73 
74     return 0;
75 }                
原文地址:https://www.cnblogs.com/black-mamba/p/5951147.html