多通道矩阵的分离与聚合

 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\n", srcImage.data);
15     Mat m = srcImage.clone();
16     printf("m-data address:%p\n", 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\n", 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\n", 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 }                
时间: 2024-10-10 08:16:35

多通道矩阵的分离与聚合的相关文章

opencv多通道数据和多维数据的区别

opencv中经常要用到多通道矩阵来处理彩色图像,同时多维度的矩阵在opencv中也会经常遇到,这里对这两种数据结构做一个对比.总体来说,对这两种数据结构opencv在处理上是不同的,主要是数据的存储安排上不同.多通道数据仍然是按照二维数据的方式来存放数据,不过于正常的二维矩阵相比较,单个元素包含了多个数据值如B.G.R.而多维矩阵是多个层级的二维矩阵组合而成.下面是一些细节对比,和该结论的依据. opencv中多维数据的申请: int sz[]={3,2,2}; Mat dm(3,sz,CV_

(转) 基于MapReduce的ItemBase推荐算法的共现矩阵实现(一)

  转自:http://zengzhaozheng.blog.51cto.com/8219051/1557054 一.概述 这2个月研究根据用户标签情况对用户的相似度进行评估,其中涉及一些推荐算法知识,在这段时间研究了一遍<推荐算法实践>和<Mahout in action>,在这里主要是根据这两本书的一些思想和自己的一些理解对分布式基于ItemBase的推荐算法进行实现.其中分两部分,第一部分是根据共现矩阵的方式来简单的推算出用户的推荐项,第二部分则是通过传统的相似度矩阵的方法来

opencv矩阵运算(2)

简单介绍 本篇承接上一篇.继续opencv下矩阵计算的函数使用. 计算矩阵的逆 注意:矩阵A是可逆矩阵的充分必要条件是行列式detA不等于0. 详细代码 double x[3][3] = {{1, 2, 3}, {2, 2, 1}, {3, 4, 3}}; double y[3][3] = {{1, 0, 0}, {0, 2, 0}, {0, 0, 3}};   void showMatdate(Mat tmpMat){ int i, j; CvScalar s1; Width = tmpMat

paper 83:前景检测算法_1(codebook和平均背景法)

前景分割中一个非常重要的研究方向就是背景减图法,因为背景减图的方法简单,原理容易被想到,且在智能视频监控领域中,摄像机很多情况下是固定的,且背景也是基本不变或者是缓慢变换的,在这种场合背景减图法的应用驱使了其不少科研人员去研究它. 但是背景减图获得前景图像的方法缺点也很多:比如说光照因素,遮挡因素,动态周期背景,且背景非周期背景,且一般情况下我们考虑的是每个像素点之间独立,这对实际应用留下了很大的隐患. 这一小讲主要是讲简单背景减图法和codebook法. 一.简单背景减图法的工作原理. 在视频

opencv-----基本数据类型

OpenCV提供了多种基本数据类型.可以在"…/OpenCV/cxcore/include"目录下的cxtypes.h文件中查看其详细定义. CvPoint是一个包含integer类型成员x和y的简单结构体.CvPoint有两个变体类型:CvPoint2D32f和CvPoint3D32f.前者同样有两个成员x,y,但它们是浮点类型:而后者却多了一个浮点类型的成员z. CvSize类型与CvPoint非常相似,但它的数据成员是integer类型的width和height.如果希望使用浮点

[OpenCV学习笔记1][OpenCV基本数据类型]

CvPoint基于二维整形坐标轴的点typedef struct CvPoint{int x; /* X 坐标, 通常以 0 为基点 */int y; /* y 坐标,通常以 0 为基点 */}CvPoint;/* 构造函数 */inline CvPoint cvPoint( int x, int y );/* 从 CvPoint2D32f 类型转换得来 */inline CvPoint cvPointFrom32f( CvPoint2D32f point ); CvPoint基于二维整形坐标轴

sobel 使用说明

转自http://www.cnblogs.com/justany/archive/2012/11/23/2782660.html OpenCV 2.4+ C++ 边缘梯度计算 2012-11-23 09:11 by Justany_WhiteSnow, 16594 阅读, 6 评论, 收藏, 编辑 图像的边缘 图像的边缘从数学上是如何表示的呢? 图像的边缘上,邻近的像素值应当显著地改变了.而在数学上,导数是表示改变快慢的一种方法.梯度值的大变预示着图像中内容的显著变化了. 用更加形象的图像来解释

CvMat、Mat、IplImage之间的转换详解及实例

见原博客:http://blog.sina.com.cn/s/blog_74a459380101obhm.html OpenCV学习之CvMat的用法详解及实例 CvMat是OpenCV比较基础的函数.初学者应该掌握并熟练应用.但是我认为计算机专业学习的方法是,不断的总结并且提炼,同时还要做大量的实践,如编码,才能记忆深刻,体会深刻,从而引导自己想更高层次迈进. 1.初始化矩阵: 方式一.逐点赋值式: CvMat* mat = cvCreateMat( 2, 2, CV_64FC1 ); cvZ

ffmpeg文档16-音频编码器

16 音频编码器 介绍当前可用的音频编码器 aac AAC(Advanced Audio Coding )编码器 当前原生(内置)编码器还处于实验阶段,而且只能支持AAC-LC(低复杂度AAC).要使用这个编码器,必须选择 ‘experimental’或者'lower' 因为当前还处于实验期,所以很多意外可能发生.如果需要一个更稳定的AAC编码器,参考libvo-aacenc,然而它也有一些负面报告. aac选项 b 设置码率,单位是bits/s,是自动恒定比特率(CBR)模式的码率 q 设置为