http://blog.csdn.net/xiaowei_cqu/article/details/7771760
小魏的修行路
Talk is cheap. Show me the code.
今天百度搜资料还搜到了自己的。。。《访问图像中每个像素的值》,这是之前写的了,用的也是2.0的风格IplImage*格式,不太适用后来Mat的格式,特此重写一篇。
以下例子源自《The OpenCV Tutorials --Release 2.4.2》2.2 How to scan images, lookup tables and time measurement with OpenCV
图像容器Mat
还是先看Mat的存储形式。Mat和Matlab里的数组格式有点像,但一般是二维向量,如果是灰度图,一般存放
<uchar>类型;如果是RGB彩色图,存放
<Vec3b>类型。
单通道灰度图数据存放格式:
多通道的图像中,每列并列存放通道数量的子列,如RGB三通道彩色图:
注意通道的顺序反转了:BGR。通常情况内存足够大的话图像的每一行是连续存放的,也就是在内存上图像的所有数据存放成一行,这中情况在访问时可以提供很大方便。可以用
isContinuous()函数来判断图像数组是否为连续的。
访问图像中的像素
高效的方法:C操作符[ ]
最快的是直接用C风格的内存访问操作符[]来访问:
- Mat& ScanImageAndReduceC(Mat& I, const uchar* const table)
- {
- // accept only char type matrices
- CV_Assert(I.depth() != sizeof(uchar));
- int channels = I.channels();
- int nRows = I.rows ;
- int nCols = I.cols* channels;
- if (I.isContinuous())
- {
- nCols *= nRows;
- nRows = 1;
- }
- int i,j;
- uchar* p;
- for( i = 0; i < nRows; ++i)
- {
- p = I.ptr<uchar>(i);
- for ( j = 0; j < nCols; ++j)
- {
- p[j] = table[p[j]];
- }
- }
- return I;
- }
注意:
书中这段代码是有问题的,前面写成了
- int nRows = I.rows * channels;
- int nCols = I.cols;
一般情况 isContinous为true,运行不会出错,但你可以注释掉那个if,会有访问越界的问题。
这种访问形式就是在每行定义一个指针,然后在内存上直接连续访问。如果整个数组在内存上都是连续存放的,那么只需要定义一个指针就可以访问所有的数据!如单通道的灰度图访问方式如下:
- uchar* p = I.data;
- for( unsigned int i =0; i < ncol*nrows; ++i)
- *p++ = table[*p];
安全的方法:迭代器iterator
相比用指针直接访问可能出现越界问题,迭代器绝对是非常安全的方法:- Mat& ScanImageAndReduceIterator(Mat& I, const uchar* const table)
- {
- // accept only char type matrices
- CV_Assert(I.depth() != sizeof(uchar));
- const int channels = I.channels();
- switch(channels)
- {
- case 1:
- {
- MatIterator_<uchar> it, end;
- for( it = I.begin<uchar>(), end = I.end<uchar>(); it != end; ++it)
- *it = table[*it];
- break;
- }
- case 3:
- {
- MatIterator_<Vec3b> it, end;
- for( it = I.begin<Vec3b>(), end = I.end<Vec3b>(); it != end; ++it)
- {
- (*it)[0] = table[(*it)[0]];
- (*it)[1] = table[(*it)[1]];
- (*it)[2] = table[(*it)[2]];
- }
- }
- }
- return I;
- }
这种方式虽然安全,但是挺慢的,一会儿就知道了。
更慢的方法:动态地址计算
这种方法在需要连续扫描所有点的应用时并不推荐,因为它更实用与随机访问。这种方法最基本的用途是访问任意的某一行某一列:
- Mat& ScanImageAndReduceRandomAccess(Mat& I, const uchar* const table)
- {
- // accept only char type matrices
- CV_Assert(I.depth() != sizeof(uchar));
- const int channels = I.channels();
- switch(channels)
- {
- case 1:
- {
- for( int i = 0; i < I.rows; ++i)
- for( int j = 0; j < I.cols; ++j )
- I.at<uchar>(i,j) = table[I.at<uchar>(i,j)];
- break;
- }
- case 3:
- {
- Mat_<Vec3b> _I = I;
- for( int i = 0; i < I.rows; ++i)
- for( int j = 0; j < I.cols; ++j )
- {
- _I(i,j)[0] = table[_I(i,j)[0]];
- _I(i,j)[1] = table[_I(i,j)[1]];
- _I(i,j)[2] = table[_I(i,j)[2]];
- }
- I = _I;
- break;
- }
- }
- return I;
- }
减小颜色空间 color space reduction
现在来介绍下上述函数对每个元素的操作,也就是用table更改像素值。这里其实是做了个减小颜色空间的操作,这在一些识别之类的应用中会大大降低运算复杂度。类如uchar类型的三通道图像,每个通道取值可以是0~255,于是就有 256*256个不同的值。我们可以通过定义:
0~9 范围的像素值为 0
10~19 范围的像素值 为 10
20~29 范围的像素值为 20
。。。。。。
着这样的操作将颜色取值降低为 26*26*26 种情况。这个操作可以用一个简单的公式:
0~9 范围的像素值为 0
10~19 范围的像素值 为 10
20~29 范围的像素值为 20
。。。。。。
着这样的操作将颜色取值降低为 26*26*26 种情况。这个操作可以用一个简单的公式:
来实现,因为C++中int类型除法操作会自动截余。 类如 Iold=14; Inew=(Iold/10)*10=(14/10)*10=1*10=10;
在处理图像像素时,每个像素需要进行一遍上述计算也需要一定的时间花销。但我们注意到其实只有 0~255 种像素,即只有256种情况。进一步可以把256种计算好的结果提前存在表中 table 中,这样每种情况不需计算直接从 table 中取结果即可。
在处理图像像素时,每个像素需要进行一遍上述计算也需要一定的时间花销。但我们注意到其实只有 0~255 种像素,即只有256种情况。进一步可以把256种计算好的结果提前存在表中 table 中,这样每种情况不需计算直接从 table 中取结果即可。
- int divideWith=10;
- uchar table[256];
- for (int i = 0; i < 256; ++i)
- table[i] = divideWith* (i/divideWith);
- p[j] = table[p[j]];
LUT : Look up table
OpenCV 很聪明的有个 LUT 函数就是针对这种 Look up talbe 的操作:- Mat lookUpTable(1, 256, CV_8U);
- uchar* p = lookUpTable.data;
- for( int i = 0; i < 256; ++i)
- p[i] = table[i];
- for (int i = 0; i < times; ++i)
- LUT(I, lookUpTable, J);
算法计时
为了验证几种方法的效率,可以用一个简单的计时和输出:
- double t;
- t = (double)getTickCount();
- t = 1000*((double)getTickCount() - t)/getTickFrequency();
- t /= times;
实验结果
原图:
降低颜色空间结果:
算法时间:
更清楚的时间对比表:
转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7771760
实验代码下载:http://download.csdn.net/detail/xiaowei_cqu/4443761
-
顶
- 30
-
踩
- 0
-
猜你在找
-
18楼
aprhz 2013-11-01 12:48发表
- I.ptr<uchar>(i)是什么意思?
-
17楼
小魔大树哥 2013-10-17 17:01发表
-
单通道(灰度图)的读取像素 最后像素值放在哪 table还是p中,初学者请教小魏,还有const uchar*const table[352*288];
uchar *p = I.data ;这两行代码过不去,类型不一致
-
16楼
byctw 2013-06-05 11:49发表
-
请问:
Mat outfile; 要访问其第二个像素
用 outfile.data[1] 的语法是否也可以?
-
15楼
masikkk 2013-06-03 20:23发表
- 知道什么是LUT了
-
14楼
cxchenxingcool 2013-04-18 00:14发表
- 由IplImage*转到Mat,总感觉不适应,在二者之间只能IplImage与Mat互换
-
13楼
郑海波 2013-03-26 11:28发表
-
楼主对android版的OpenCV可有研究?里面的Mat(java版)元素如何访问?
-
Re:
xiaowei_cqu 2013-03-26 13:12发表
- 回复NUPTboyZHB:没用过
-
12楼
AaBb301 2012-12-03 21:05发表
- 2了,看到下面原来里有介绍,呵呵
-
11楼
AaBb301 2012-12-03 20:28发表
-
突然明白好像是”离散量化“的,请问博主是这个主要功能吗
-
Re:
xiaowei_cqu 2012-12-03 20:57发表
-
回复AaBb301:嗯,用来减小颜色空间
-
Re:
AaBb301 2012-12-03 21:06发表
- 回复xiaowei_cqu:嗯 谢谢博主
-
10楼
AaBb301 2012-12-03 20:21发表
- 想问下博主,ScanImageAndReduceC函数参数里那个table有什么用啊,我刚学opencv,很多不懂
-
9楼
zhangnzhen 2012-11-20 13:27发表
- 代码里lut的计时部分错了,t=(double)getTickCount()应该在代码执行前面。要不这速度也太发指了~
-
8楼
xiaojidan2011 2012-09-11 13:45发表
- 哦哦哦哦 不好意思的 我刚刚调试了下的 单幅是可以显示的 成功了 嘻嘻 可能运行的时候占据内存太大了的原因的 ,搞不懂 了
-
7楼
xiaojidan2011 2012-09-11 13:41发表
- 代码运行编译都没什么问题,局势显示的时候 窗口全部是灰色的,貌似图像的值没有传进去的
-
6楼
xiaojidan2011 2012-09-11 13:38发表
- 写的很好的呀 但是我跑了代码 却显示不出图像,是怎么回事的呀
-
5楼
jizhihang2000 2012-09-07 14:00发表
-
“另外要注意的是在三通道图像中我们定义的是 <Vec3b>格式的迭代器,如果定义成uchar,则只能访问到B即蓝色通道的值。”
为什么不是所有像素的所有通道都访问了一遍?-
Re:
xiaowei_cqu 2012-09-07 14:37发表
- 回复jizhihang2000:三通道像素是BRG排放的,相当于每个元素里放了三个uchar。迭代器定义成uchar只取出了第一个B的值,你可以试试
-
4楼
caiqi1123 2012-09-07 10:33发表
-
才女:
代码
03. // accept only char type matrices
04. CV_Assert(I.depth() != sizeof(uchar));
有问题吧?改为:
// accept only char type matrices
CV_Assert(mat.depth() == CV_8U);-
Re:
xiaowei_cqu 2012-09-07 10:42发表
-
回复caiqi1123:我传递的参数是I;而且CV_8U不就是uchar的类型嘛
-
Re:
caiqi1123 2012-09-07 10:58发表
-
回复xiaowei_cqu:回复caiqi1123:CV_8U 宏是0哦。sizeof(uchar)=8
mat.depth() 返回的是CV_8U。仅供探讨啊。
-
3楼
afery 2012-09-06 17:25发表
- 有翻译版的看诶
-
2楼
meiqingfly 2012-07-23 13:28发表
-
这个好呢。。
-
Re:
xiaowei_cqu 2012-07-23 14:11发表
- 回复meiqingfly:没写什么,是tutorials里自带的例子
-
1楼
skiaazure 2012-07-23 07:45发表
-
我还是习惯用at。。。
-
Re:
xiaowei_cqu 2012-07-23 08:46发表
- 回复skiaazure:我也是,感觉直接用[]很危险
id="ad_frm_0" frameborder="0" scrolling="no" src="http://blog.csdn.net/common/ad.html?t=5&containerId=ad_bot&frmId=ad_frm_0" style="border-width: 0px; overflow: hidden; width: 746px; height: 0px;">
核心技术类目
全部主题
Java
VPN
Android
iOS
ERP
IE10
Eclipse
CRM
JavaScript
Ubuntu
NFC
WAP
jQuery
数据库
BI
HTML5
Spring
Apache
Hadoop
.NET
API
HTML
SDK
IIS
Fedora
XML
LBS
Unity
Splashtop
UML
components
Windows Mobile
Rails
QEMU
KDE
Cassandra
CloudStack
FTC
coremail
OPhone
CouchBase
云计算
iOS6
Rackspace
Web App
SpringSide
Maemo
Compuware
大数据
aptech
Perl
Tornado
Ruby
Hibernate
ThinkPHP
Spark
HBase
Pure
Solr
Angular
Cloud Foundry
Redis
Scala
Django
Bootstrap
- 个人资料
-
- 访问:644509次
- 积分:11064分
- 排名:第323名
- 原创:139篇
- 转载:0篇
- 译文:1篇
- 评论:1723条
- 博客专栏
图像处理 文章:18篇
阅读:44774模式识别 文章:13篇
阅读:43860算法设计与分析 文章:20篇
阅读:69232OpenCV学习与实践 文章:30篇
阅读:294025
- 文章搜索
- 博主简介
- 阅读排行
- (23666)
- (22174)
- (21945)
- (19629)
- (18858)
- (17224)
- (16641)
- (16327)
- (15621)
- (12845)
- 评论排行
- (106)
- (81)
- (66)
- (49)
- (48)
- (45)
- (45)
- (43)
- (40)
- (39)
- 最新评论
: 我想问问怎么用MATLAB把保存在TXT文本中的GEI转换成图片
: http://www.wikicfp.com/cfp/这个网站好,有用,多谢大牛
: LZ,又来叨扰了。。。我想把一个cvMat矩阵转化成一幅图片,结果运行出来是灰色的,不知道怎么改,还...
: 第二个多项式核函数是不是少了个y呢?
: 你好,你给的链接怎么打不开啊,我想下载你的源码。
: 用这种learning to rank的思想, 还有什么文章的啊? 麻烦推荐下
: 确实讲得比较详细,而且也正确。
: 您好,看到您前面一篇博客写的灰度图,一般存放类型;如果是RGB彩色图,存放类型。我想问一下 ...
: 为什么运行后只有一个黑框,不显示图片,无错误。。。
: 学姐,nonfree里的头文件在哪下的?我怎么就找不到呢
小魏的修行路
Talk is cheap. Show me the code.
今天百度搜资料还搜到了自己的。。。《访问图像中每个像素的值》,这是之前写的了,用的也是2.0的风格IplImage*格式,不太适用后来Mat的格式,特此重写一篇。
以下例子源自《The OpenCV Tutorials --Release 2.4.2》2.2 How to scan images, lookup tables and time measurement with OpenCV
图像容器Mat
还是先看Mat的存储形式。Mat和Matlab里的数组格式有点像,但一般是二维向量,如果是灰度图,一般存放
<uchar>类型;如果是RGB彩色图,存放
<Vec3b>类型。
单通道灰度图数据存放格式:
多通道的图像中,每列并列存放通道数量的子列,如RGB三通道彩色图:
注意通道的顺序反转了:BGR。通常情况内存足够大的话图像的每一行是连续存放的,也就是在内存上图像的所有数据存放成一行,这中情况在访问时可以提供很大方便。可以用
isContinuous()函数来判断图像数组是否为连续的。
访问图像中的像素
高效的方法:C操作符[ ]
最快的是直接用C风格的内存访问操作符[]来访问:
- Mat& ScanImageAndReduceC(Mat& I, const uchar* const table)
- {
- // accept only char type matrices
- CV_Assert(I.depth() != sizeof(uchar));
- int channels = I.channels();
- int nRows = I.rows ;
- int nCols = I.cols* channels;
- if (I.isContinuous())
- {
- nCols *= nRows;
- nRows = 1;
- }
- int i,j;
- uchar* p;
- for( i = 0; i < nRows; ++i)
- {
- p = I.ptr<uchar>(i);
- for ( j = 0; j < nCols; ++j)
- {
- p[j] = table[p[j]];
- }
- }
- return I;
- }
注意:
书中这段代码是有问题的,前面写成了
- int nRows = I.rows * channels;
- int nCols = I.cols;
一般情况 isContinous为true,运行不会出错,但你可以注释掉那个if,会有访问越界的问题。
这种访问形式就是在每行定义一个指针,然后在内存上直接连续访问。如果整个数组在内存上都是连续存放的,那么只需要定义一个指针就可以访问所有的数据!如单通道的灰度图访问方式如下:
- uchar* p = I.data;
- for( unsigned int i =0; i < ncol*nrows; ++i)
- *p++ = table[*p];
安全的方法:迭代器iterator
相比用指针直接访问可能出现越界问题,迭代器绝对是非常安全的方法:- Mat& ScanImageAndReduceIterator(Mat& I, const uchar* const table)
- {
- // accept only char type matrices
- CV_Assert(I.depth() != sizeof(uchar));
- const int channels = I.channels();
- switch(channels)
- {
- case 1:
- {
- MatIterator_<uchar> it, end;
- for( it = I.begin<uchar>(), end = I.end<uchar>(); it != end; ++it)
- *it = table[*it];
- break;
- }
- case 3:
- {
- MatIterator_<Vec3b> it, end;
- for( it = I.begin<Vec3b>(), end = I.end<Vec3b>(); it != end; ++it)
- {
- (*it)[0] = table[(*it)[0]];
- (*it)[1] = table[(*it)[1]];
- (*it)[2] = table[(*it)[2]];
- }
- }
- }
- return I;
- }
这种方式虽然安全,但是挺慢的,一会儿就知道了。
更慢的方法:动态地址计算
这种方法在需要连续扫描所有点的应用时并不推荐,因为它更实用与随机访问。这种方法最基本的用途是访问任意的某一行某一列:
- Mat& ScanImageAndReduceRandomAccess(Mat& I, const uchar* const table)
- {
- // accept only char type matrices
- CV_Assert(I.depth() != sizeof(uchar));
- const int channels = I.channels();
- switch(channels)
- {
- case 1:
- {
- for( int i = 0; i < I.rows; ++i)
- for( int j = 0; j < I.cols; ++j )
- I.at<uchar>(i,j) = table[I.at<uchar>(i,j)];
- break;
- }
- case 3:
- {
- Mat_<Vec3b> _I = I;
- for( int i = 0; i < I.rows; ++i)
- for( int j = 0; j < I.cols; ++j )
- {
- _I(i,j)[0] = table[_I(i,j)[0]];
- _I(i,j)[1] = table[_I(i,j)[1]];
- _I(i,j)[2] = table[_I(i,j)[2]];
- }
- I = _I;
- break;
- }
- }
- return I;
- }
减小颜色空间 color space reduction
现在来介绍下上述函数对每个元素的操作,也就是用table更改像素值。这里其实是做了个减小颜色空间的操作,这在一些识别之类的应用中会大大降低运算复杂度。类如uchar类型的三通道图像,每个通道取值可以是0~255,于是就有 256*256个不同的值。我们可以通过定义:
0~9 范围的像素值为 0
10~19 范围的像素值 为 10
20~29 范围的像素值为 20
。。。。。。
着这样的操作将颜色取值降低为 26*26*26 种情况。这个操作可以用一个简单的公式:
0~9 范围的像素值为 0
10~19 范围的像素值 为 10
20~29 范围的像素值为 20
。。。。。。
着这样的操作将颜色取值降低为 26*26*26 种情况。这个操作可以用一个简单的公式:
来实现,因为C++中int类型除法操作会自动截余。 类如 Iold=14; Inew=(Iold/10)*10=(14/10)*10=1*10=10;
在处理图像像素时,每个像素需要进行一遍上述计算也需要一定的时间花销。但我们注意到其实只有 0~255 种像素,即只有256种情况。进一步可以把256种计算好的结果提前存在表中 table 中,这样每种情况不需计算直接从 table 中取结果即可。
在处理图像像素时,每个像素需要进行一遍上述计算也需要一定的时间花销。但我们注意到其实只有 0~255 种像素,即只有256种情况。进一步可以把256种计算好的结果提前存在表中 table 中,这样每种情况不需计算直接从 table 中取结果即可。
- int divideWith=10;
- uchar table[256];
- for (int i = 0; i < 256; ++i)
- table[i] = divideWith* (i/divideWith);
- p[j] = table[p[j]];
LUT : Look up table
OpenCV 很聪明的有个 LUT 函数就是针对这种 Look up talbe 的操作:- Mat lookUpTable(1, 256, CV_8U);
- uchar* p = lookUpTable.data;
- for( int i = 0; i < 256; ++i)
- p[i] = table[i];
- for (int i = 0; i < times; ++i)
- LUT(I, lookUpTable, J);
算法计时
为了验证几种方法的效率,可以用一个简单的计时和输出:
- double t;
- t = (double)getTickCount();
- t = 1000*((double)getTickCount() - t)/getTickFrequency();
- t /= times;
实验结果
原图:
降低颜色空间结果:
算法时间:
更清楚的时间对比表:
转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7771760
实验代码下载:http://download.csdn.net/detail/xiaowei_cqu/4443761
-
顶
- 30
-
踩
- 0
-
猜你在找
width="728" height="90" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" id="aswift_0" name="aswift_0" style="left: 0px; position: absolute; top: 0px;">
-
18楼
aprhz 2013-11-01 12:48发表
- I.ptr<uchar>(i)是什么意思?
-
17楼
小魔大树哥 2013-10-17 17:01发表
-
单通道(灰度图)的读取像素 最后像素值放在哪 table还是p中,初学者请教小魏,还有const uchar*const table[352*288];
uchar *p = I.data ;这两行代码过不去,类型不一致
-
16楼
byctw 2013-06-05 11:49发表
-
请问:
Mat outfile; 要访问其第二个像素
用 outfile.data[1] 的语法是否也可以?
-
15楼
masikkk 2013-06-03 20:23发表
- 知道什么是LUT了
-
14楼
cxchenxingcool 2013-04-18 00:14发表
- 由IplImage*转到Mat,总感觉不适应,在二者之间只能IplImage与Mat互换
-
13楼
郑海波 2013-03-26 11:28发表
- 楼主对android版的OpenCV可有研究?里面的Mat(java版)元素如何访问?
- 回复NUPTboyZHB:没用过
-
Re:
xiaowei_cqu 2013-03-26 13:12发表
-
12楼
AaBb301 2012-12-03 21:05发表
- 2了,看到下面原来里有介绍,呵呵
-
11楼
AaBb301 2012-12-03 20:28发表
- 突然明白好像是”离散量化“的,请问博主是这个主要功能吗
- 回复AaBb301:嗯,用来减小颜色空间
- 回复xiaowei_cqu:嗯 谢谢博主
-
Re:
xiaowei_cqu 2012-12-03 20:57发表
-
Re:
AaBb301 2012-12-03 21:06发表
-
10楼
AaBb301 2012-12-03 20:21发表
- 想问下博主,ScanImageAndReduceC函数参数里那个table有什么用啊,我刚学opencv,很多不懂
-
9楼
zhangnzhen 2012-11-20 13:27发表
- 代码里lut的计时部分错了,t=(double)getTickCount()应该在代码执行前面。要不这速度也太发指了~
-
8楼
xiaojidan2011 2012-09-11 13:45发表
- 哦哦哦哦 不好意思的 我刚刚调试了下的 单幅是可以显示的 成功了 嘻嘻 可能运行的时候占据内存太大了的原因的 ,搞不懂 了
-
7楼
xiaojidan2011 2012-09-11 13:41发表
- 代码运行编译都没什么问题,局势显示的时候 窗口全部是灰色的,貌似图像的值没有传进去的
-
6楼
xiaojidan2011 2012-09-11 13:38发表
- 写的很好的呀 但是我跑了代码 却显示不出图像,是怎么回事的呀
-
5楼
jizhihang2000 2012-09-07 14:00发表
-
“另外要注意的是在三通道图像中我们定义的是 <Vec3b>格式的迭代器,如果定义成uchar,则只能访问到B即蓝色通道的值。”
为什么不是所有像素的所有通道都访问了一遍? - 回复jizhihang2000:三通道像素是BRG排放的,相当于每个元素里放了三个uchar。迭代器定义成uchar只取出了第一个B的值,你可以试试
-
Re:
xiaowei_cqu 2012-09-07 14:37发表
-
4楼
caiqi1123 2012-09-07 10:33发表
-
才女:
代码
03. // accept only char type matrices
04. CV_Assert(I.depth() != sizeof(uchar));
有问题吧?改为:
// accept only char type matrices
CV_Assert(mat.depth() == CV_8U); - 回复caiqi1123:我传递的参数是I;而且CV_8U不就是uchar的类型嘛
-
回复xiaowei_cqu:回复caiqi1123:CV_8U 宏是0哦。sizeof(uchar)=8
mat.depth() 返回的是CV_8U。仅供探讨啊。
-
Re:
xiaowei_cqu 2012-09-07 10:42发表
-
Re:
caiqi1123 2012-09-07 10:58发表
-
3楼
afery 2012-09-06 17:25发表
- 有翻译版的看诶
-
2楼
meiqingfly 2012-07-23 13:28发表
- 这个好呢。。
- 回复meiqingfly:没写什么,是tutorials里自带的例子
-
Re:
xiaowei_cqu 2012-07-23 14:11发表
-
1楼
skiaazure 2012-07-23 07:45发表
- 我还是习惯用at。。。
- 回复skiaazure:我也是,感觉直接用[]很危险
-
Re:
xiaowei_cqu 2012-07-23 08:46发表
核心技术类目
全部主题
Java
VPN
Android
iOS
ERP
IE10
Eclipse
CRM
JavaScript
Ubuntu
NFC
WAP
jQuery
数据库
BI
HTML5
Spring
Apache
Hadoop
.NET
API
HTML
SDK
IIS
Fedora
XML
LBS
Unity
Splashtop
UML
components
Windows Mobile
Rails
QEMU
KDE
Cassandra
CloudStack
FTC
coremail
OPhone
CouchBase
云计算
iOS6
Rackspace
Web App
SpringSide
Maemo
Compuware
大数据
aptech
Perl
Tornado
Ruby
Hibernate
ThinkPHP
Spark
HBase
Pure
Solr
Angular
Cloud Foundry
Redis
Scala
Django
Bootstrap
- 个人资料
-
- 访问:644509次
- 积分:11064分
- 排名:第323名
- 原创:139篇
- 转载:0篇
- 译文:1篇
- 评论:1723条
- 博客专栏
图像处理 文章:18篇
阅读:44774模式识别 文章:13篇
阅读:43860算法设计与分析 文章:20篇
阅读:69232OpenCV学习与实践 文章:30篇
阅读:294025
- 文章搜索
- 博主简介
- 阅读排行
- (23666)
- (22174)
- (21945)
- (19629)
- (18858)
- (17224)
- (16641)
- (16327)
- (15621)
- (12845)
- 评论排行
- (106)
- (81)
- (66)
- (49)
- (48)
- (45)
- (45)
- (43)
- (40)
- (39)
- 最新评论
: 我想问问怎么用MATLAB把保存在TXT文本中的GEI转换成图片
: http://www.wikicfp.com/cfp/这个网站好,有用,多谢大牛
: LZ,又来叨扰了。。。我想把一个cvMat矩阵转化成一幅图片,结果运行出来是灰色的,不知道怎么改,还...
: 第二个多项式核函数是不是少了个y呢?
: 你好,你给的链接怎么打不开啊,我想下载你的源码。
: 用这种learning to rank的思想, 还有什么文章的啊? 麻烦推荐下
: 确实讲得比较详细,而且也正确。
: 您好,看到您前面一篇博客写的灰度图,一般存放类型;如果是RGB彩色图,存放类型。我想问一下 ...
: 为什么运行后只有一个黑框,不显示图片,无错误。。。
: 学姐,nonfree里的头文件在哪下的?我怎么就找不到呢