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 }