<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; yang_xian521</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/yang_xian521/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 14:23:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>OpenCV学习笔记（五）——2.0以上版本和以下版本的数据兼容</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv20/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv20/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 07:59:30 +0000</pubDate>
		<dc:creator>yang_xian521</dc:creator>
				<category><![CDATA[图形和视觉计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/01/06/opencv20/</guid>
		<description><![CDATA[都知道，2.0版本对之前的OpenCV数据结构进行了大幅度的修改。但对之前版本的兼容是一个很重要的事情。这节就主要讨论这个问题 首先来看一下2.0版本对之前版本的进行了哪些修改 1.采用了新的数据结构Mat作为图像的容器，取代了之前的CvMat和lplImage，这个改动不是太复杂，只需适应一下新东西，而且可以自由转换 Mat I; IplImage pI = I; CvMat mI = I; 对于指针的操作要相对复杂一些，而且还要注意内存的释放，我这里不推荐用老版本的数据结构，例如： Mat I; IplImage* pI = &#38;I.operator IplImage(); CvMat* mI = &#38;I.operator CvMat(); 2.对library进行了重组，将原来的一个大库根据功能结构分成具体小库，这样包含头文件的时候只需要加入你需要的库，只是原来库的子集 3.使用了cv 这个namespace来防止和其他的library 结构冲突。所以在使用的时候也要预先加上cv::关键字，这也是新版本的函数，数据都省略了cv前缀的原因，一般放在include之后，格式为： using namespace cv; // The new C++ interface API is inside this namespace. Import it.]]></description>
			<content:encoded><![CDATA[<p>都知道，2.0版本对之前的OpenCV数据结构进行了大幅度的修改。但对之前版本的兼容是一个很重要的事情。这节就主要讨论这个问题<br />
首先来看一下2.0版本对之前版本的进行了哪些修改<br />
1.采用了新的数据结构Mat作为图像的容器，取代了之前的CvMat和lplImage，这个改动不是太复杂，只需适应一下新东西，而且可以自由转换<br />
<code>Mat I;<br />
IplImage pI = I;<br />
CvMat mI = I;<br />
</code><br />
对于指针的操作要相对复杂一些，而且还要注意内存的释放，我这里不推荐用老版本的数据结构，例如：<br />
<code>Mat I;<br />
IplImage* pI = &amp;I.operator IplImage();<br />
CvMat* mI = &amp;I.operator CvMat();<br />
</code><br />
2.对library进行了重组，将原来的一个大库根据功能结构分成具体小库，这样包含头文件的时候只需要加入你需要的库，只是原来库的子集<br />
3.使用了cv 这个namespace来防止和其他的library 结构冲突。所以在使用的时候也要预先加上cv::关键字，这也是新版本的函数，数据都省略了cv前缀的原因，一般放在include之后，格式为：<br />
<code>using namespace cv; // The new C++ interface API is inside this namespace. Import it.<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenCV学习笔记（四）——新版本的数据结构core</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/01/06/opencvcore/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/01/06/opencvcore/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 07:59:14 +0000</pubDate>
		<dc:creator>yang_xian521</dc:creator>
				<category><![CDATA[图形和视觉计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/01/06/opencvcore/</guid>
		<description><![CDATA[2.0新版本对数据结构进行了大幅修改： 定义了DataType类 定义了Point_模板类，取代了之前版本的CvPoint、CvPoint2D32f 定义了Point3_模板类，取代了之前版本的CvPoint2D32f 定义了Size_模板类，取代了之前版本的CvSize和CvSize2D32f 定义了Rect_模板类，取代了之前版本的CvRect RotatedRect模板类， TermCriteria模板类，取代了之前的CvTermCriteria，这个类是作为迭代算法的终止条件的，这个类在参考手册里介绍的很简单，我查了些资料，这里介绍一下。该类变量需要3个参数，一个是类型，第二个参数为迭代的最大次数，最后一个是特定的阈值。类型有CV_TERMCRIT_ITER、CV_TERMCRIT_EPS、CV_TERMCRIT_ITER+CV_TERMCRIT_EPS，分别代表着迭代终止条件为达到最大迭代次数终止，迭代到阈值终止，或者两者都作为迭代终止条件。以上的宏对应的c++的版本分别为TermCriteria::COUNT、TermCriteria::EPS，这里的COUNT也可以写成MAX_ITER。 Matx模板类。Matx模板类是对Mat类的一个拓展，从Matx类有派生出Vec类，又Vec类又派生出Scalar_类，取代了CvScalar 定义了Range类指定了一个序列的一个连续的子序列 定义了Ptr类用来对老版本的数据结构进行指针操作，更安全有效，可以防止内存的不正常使用。 最最重要的定义了Mat类来表示矩阵，取代了之前的CvMat和lplImage。Mat结构支持的操作有： 构造析构函数Mat和~Mat 对=、MatExpr、( )、CvMat、IplImage进行了运算符重载 row、col函数 rowRange、colRange 类似matlab的运算操作diag、t、inv、mul、cross、dot、zeros、one、eye 复制转换变形clone、copyTo、convertTo、assignTo、setTo、reshape、create、addref 其中copyTo函数有个妙用，不但可以复制Mat，还可以通过mask提取出感兴趣的部分 数据的操作release、resize、reserve、push_back、pop_back、locateROI、adjustROI Mat的信息total、isContinuous、elemSize、elemSize1、type、depth、channes、step1、size、empty 定位ptr、at、begin、end 还做了几个扩展类Mat_、NAryMatlterator、SparseMat、SparseMat_取代了之前的CvSparseMat。这些类的操作运算与Mat大同小异，类声明参考core的具体头文件 当然，新版本对老版本的数据结构和函数依然支持。 新版本还在这些结构里支持dft、dct变换，我这里讲一下我的新发现PCA类、SVD类 PCA类有构造函数PCA，运算符重载()，project，backProject。SVD类有构造函数SVD，运算符重载()，compute，solveZ，backSubst 这里介绍几个我使用过的实用函数： inRange函数可以检查Matsrc的内容是否在Matlower、Matupper之间，输出结果是一个uchar型矩阵，1表示在两者之间，否则为0，值得注意的是，Matlower，Matupper也可以用Scalar的格式 bitwise_xxx函数对两个矩阵进行位运算，结果保存在第三个矩阵当中 mixChannels函数可以实现矩阵的指定通道复制到新矩阵的指定通道 总之，新版本支持更多的数学运算，还支持一些画图操作]]></description>
			<content:encoded><![CDATA[<p>2.0新版本对数据结构进行了大幅修改：</p>
<p>定义了DataType类</p>
<p>定义了Point_模板类，取代了之前版本的CvPoint、CvPoint2D32f</p>
<p>定义了Point3_模板类，取代了之前版本的CvPoint2D32f</p>
<p>定义了Size_模板类，取代了之前版本的CvSize和CvSize2D32f</p>
<p>定义了Rect_模板类，取代了之前版本的CvRect</p>
<p>RotatedRect模板类，</p>
<p>TermCriteria模板类，取代了之前的CvTermCriteria，这个类是作为迭代算法的终止条件的，这个类在参考手册里介绍的很简单，我查了些资料，这里介绍一下。该类变量需要3个参数，一个是类型，第二个参数为迭代的最大次数，最后一个是特定的阈值。类型有CV_TERMCRIT_ITER、CV_TERMCRIT_EPS、CV_TERMCRIT_ITER+CV_TERMCRIT_EPS，分别代表着迭代终止条件为达到最大迭代次数终止，迭代到阈值终止，或者两者都作为迭代终止条件。以上的宏对应的c++的版本分别为TermCriteria::COUNT、TermCriteria::EPS，这里的COUNT也可以写成MAX_ITER。</p>
<p>Matx模板类。Matx模板类是对Mat类的一个拓展，从Matx类有派生出Vec类，又Vec类又派生出Scalar_类，取代了CvScalar</p>
<p>定义了Range类指定了一个序列的一个连续的子序列</p>
<p>定义了Ptr类用来对老版本的数据结构进行指针操作，更安全有效，可以防止内存的不正常使用。</p>
<p>最最重要的定义了Mat类来表示矩阵，取代了之前的CvMat和lplImage。Mat结构支持的操作有：</p>
<p>构造析构函数Mat和~Mat</p>
<p>对=、MatExpr、( )、CvMat、IplImage进行了运算符重载</p>
<p>row、col函数</p>
<p>rowRange、colRange</p>
<p>类似matlab的运算操作diag、t、inv、mul、cross、dot、zeros、one、eye</p>
<p>复制转换变形clone、copyTo、convertTo、assignTo、setTo、reshape、create、addref</p>
<p>其中copyTo函数有个妙用，不但可以复制Mat，还可以通过mask提取出感兴趣的部分</p>
<p>数据的操作release、resize、reserve、push_back、pop_back、locateROI、adjustROI</p>
<p>Mat的信息total、isContinuous、elemSize、elemSize1、type、depth、channes、step1、size、empty</p>
<p>定位ptr、at、begin、end</p>
<p>还做了几个扩展类Mat_、NAryMatlterator、SparseMat、SparseMat_取代了之前的CvSparseMat。这些类的操作运算与Mat大同小异，类声明参考core的具体头文件</p>
<p>当然，新版本对老版本的数据结构和函数依然支持。</p>
<p>新版本还在这些结构里支持dft、dct变换，我这里讲一下我的新发现PCA类、SVD类</p>
<p>PCA类有构造函数PCA，运算符重载()，project，backProject。SVD类有构造函数SVD，运算符重载()，compute，solveZ，backSubst</p>
<p>这里介绍几个我使用过的实用函数：</p>
<p>inRange函数可以检查Matsrc的内容是否在Matlower、Matupper之间，输出结果是一个uchar型矩阵，1表示在两者之间，否则为0，值得注意的是，Matlower，Matupper也可以用Scalar的格式</p>
<p>bitwise_xxx函数对两个矩阵进行位运算，结果保存在第三个矩阵当中</p>
<p>mixChannels函数可以实现矩阵的指定通道复制到新矩阵的指定通道</p>
<p>总之，新版本支持更多的数学运算，还支持一些画图操作</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/01/06/opencvcore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenCV学习笔记（二）——新版本模块结构</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv-2/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv-2/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 07:58:58 +0000</pubDate>
		<dc:creator>yang_xian521</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[图形和视觉计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/01/06/opencv-2/</guid>
		<description><![CDATA[还是老话题，2.0版本对OpenCV可是进行了大刀阔斧的改革，用c++重新了大部分结构，而不是1.X版本中的c结构。这些模块包括： core——定义了基本数据结构，包括最重要的Mat和一些其他的模块 imgproc——该模块包括了线性和非线性的图像滤波，图像的几何变换，颜色空间转换，直方图处理等等 video——该模块包括运动估计，背景分离，对象跟踪 calib3d——基本的多视角几何算法，单个立体摄像头标定，物体姿态估计，立体相似性算法，3D信息的重建 features2d——显著特征检测，描述，特征匹配 objdetect——物体检测和预定义好的分类器实例（比如人脸，眼睛，面部，人，车辆等等） highgui——视频捕捉、图像和视频的编码解码、图形交互界面的接口 gpu——利用GPU对OpenCV模块进行加速算法 ml——机器学习模块（SVM，决策树，Boosting等等） flann——Fast Library for Approximate Nearest Neighbors（FLANN）算法库 legacy——一些已经废弃的代码库，保留下来作为向下兼容 还有一些其他的模块，比如FLANN算法库、Google测试包、Python bingdings等等。]]></description>
			<content:encoded><![CDATA[<p>还是老话题，2.0版本对OpenCV可是进行了大刀阔斧的改革，用c++重新了大部分结构，而不是1.X版本中的c结构。这些模块包括：</p>
<p>core——定义了基本数据结构，包括最重要的Mat和一些其他的模块</p>
<p>imgproc——该模块包括了线性和非线性的图像滤波，图像的几何变换，颜色空间转换，直方图处理等等</p>
<p>video——该模块包括运动估计，背景分离，对象跟踪</p>
<p>calib3d——基本的多视角几何算法，单个立体摄像头标定，物体姿态估计，立体相似性算法，3D信息的重建</p>
<p>features2d——显著特征检测，描述，特征匹配</p>
<p>objdetect——物体检测和预定义好的分类器实例（比如人脸，眼睛，面部，人，车辆等等）</p>
<p>highgui——视频捕捉、图像和视频的编码解码、图形交互界面的接口</p>
<p>gpu——利用GPU对OpenCV模块进行加速算法</p>
<p>ml——机器学习模块（SVM，决策树，Boosting等等）</p>
<p>flann——Fast Library for Approximate Nearest Neighbors（FLANN）算法库</p>
<p>legacy——一些已经废弃的代码库，保留下来作为向下兼容</p>
<p>还有一些其他的模块，比如FLANN算法库、Google测试包、Python bingdings等等。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenCV学习笔记（三）—— Mat，图像的新容器</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv-mat/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv-mat/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 07:58:38 +0000</pubDate>
		<dc:creator>yang_xian521</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[图形和视觉计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/01/06/opencv-mat/</guid>
		<description><![CDATA[自从版本2.0，OpenCV采用了新的数据结构，用Mat类结构取代了之前用extended C写的cvMat和lplImage，更加好用啦，最大的好处就是更加方便的进行内存管理，对写更大的程序是很好的消息。 需要注意的几点： 1. Mat的拷贝只是复制了Mat的信息头，数据的指针也指向了被拷贝的数据地址，而没有真正新建一块内存来存放新的矩阵内容。这样带来的一个问题就是对其中一个Mat的数据操作就会对其他指向同一块数据的Mat产生灾难性的影响。 2.建立多维数组的格式是这样的 int sz[3] = {2, 2, 2}; Mat L(3, sz, CV_8UC(1), Scalar::all(0)); 3.传统的lplImage格式也可直接转换为Mat格式 IplImage* img = cvLoadImage("greatwave.png", 1); Mat mtx(img); // convert IplImage* -&#62; Mat 如果想将新版本的Mat格式转换为老版本，则需要如下调用： Mat I; IplImage* pI = &#38;I.operator IplImage(); CvMat* mI = &#38;I.operator CvMat(); 不过更安全的调用格式为： Ptr piI = &#38;I.operator IplImage(); 4.Mat结构更加友好，很多操作更接近matlab的风格 5.也有Point2f，Point3f，vector等数据结构可以使用 6.RNG类可以产生随机数 7.实现颜色通道的分离使用函数split]]></description>
			<content:encoded><![CDATA[<p>自从版本2.0，OpenCV采用了新的数据结构，用Mat类结构取代了之前用extended C写的cvMat和lplImage，更加好用啦，最大的好处就是更加方便的进行内存管理，对写更大的程序是很好的消息。</p>
<p>需要注意的几点：<br />
1. Mat的拷贝只是复制了Mat的信息头，数据的指针也指向了被拷贝的数据地址，而没有真正新建一块内存来存放新的矩阵内容。这样带来的一个问题就是对其中一个Mat的数据操作就会对其他指向同一块数据的Mat产生灾难性的影响。</p>
<p>2.建立多维数组的格式是这样的<br />
<code>int sz[3] = {2, 2, 2};<br />
Mat L(3, sz, CV_8UC(1), Scalar::all(0));<br />
</code><br />
3.传统的lplImage格式也可直接转换为Mat格式<br />
<code>IplImage* img = cvLoadImage("greatwave.png", 1);<br />
Mat mtx(img); // convert IplImage* -&gt; Mat<br />
</code><br />
如果想将新版本的Mat格式转换为老版本，则需要如下调用：<br />
<code>Mat I;<br />
IplImage* pI = &amp;I.operator IplImage();<br />
CvMat* mI = &amp;I.operator CvMat();<br />
</code><br />
不过更安全的调用格式为：<br />
<code>Ptr piI = &amp;I.operator IplImage();<br />
</code><br />
4.Mat结构更加友好，很多操作更接近matlab的风格<br />
5.也有Point2f，Point3f，vector等数据结构可以使用<br />
6.RNG类可以产生随机数<br />
7.实现颜色通道的分离使用函数split</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv-mat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenCV学习笔记（一）——安装配置、第一个程序</title>
		<link>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 07:58:05 +0000</pubDate>
		<dc:creator>yang_xian521</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[图形和视觉计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2012/01/06/opencv/</guid>
		<description><![CDATA[决心开始研究OpenCV。闲言少叙，sourceforge网站最近的版本是2011年8月的OpenCV2.3.1，下载安装，我这里使用的开发环境是vs2008，网上搜了一下配置的教程，与之前的几个OpenCV版本的配置过程大体相同：（教程网上很多，知之为知之，不知百度之，我这里粗略再讲一下） 1. 配置电脑的环境变量（Path变量）（需要注销才能生效），这里需要注意网上的教程又让增加一个OPENCV变量，值为D:\Program Files\OpenCV2.3.1\build(你安装的路径中的build目录) 2. 添加包含文件和库文件，这个和前几个版本方法类似，都是去工具-&#62;选项-&#62;VC目录添加build目录下的include目录及其子目录和你电脑对应版本的lib目录（选择x86 or x64，vc9 or vc10） 下面是第一个实例： 新建一个空项目，添加源文件如下： #include #include #include using namespace cv; using namespace std; int main( int argc, char** argv ) { if( argc != 2) { cout &#60;&#60;&#34; Usage: display_image ImageToLoadAndDisplay&#34; &#60;&#60; endl; return -1; } Mat image; image = imread(argv[1], CV_LOAD_IMAGE_COLOR); // Read the file if(! [...]]]></description>
			<content:encoded><![CDATA[<p>决心开始研究OpenCV。闲言少叙，sourceforge网站最近的版本是2011年8月的OpenCV2.3.1，下载安装，我这里使用的开发环境是vs2008，网上搜了一下配置的教程，与之前的几个OpenCV版本的配置过程大体相同：（教程网上很多，知之为知之，不知百度之，我这里粗略再讲一下）</p>
<p>1. 配置电脑的环境变量（Path变量）（需要注销才能生效），这里需要注意网上的教程又让增加一个OPENCV变量，值为D:\Program Files\OpenCV2.3.1\build(你安装的路径中的build目录)</p>
<p>2. 添加包含文件和库文件，这个和前几个版本方法类似，都是去工具-&gt;选项-&gt;VC目录添加build目录下的include目录及其子目录和你电脑对应版本的lib目录（选择x86 or x64，vc9  or vc10）</p>
<p>下面是第一个实例：</p>
<p>新建一个空项目，添加源文件如下：<br />
<code>#include<br />
#include<br />
#include </p>
<p>using namespace cv;<br />
using namespace std; </p>
<p>int main( int argc, char** argv )<br />
{<br />
	if( argc != 2)<br />
	{<br />
	 cout &lt;&lt;&quot; Usage: display_image ImageToLoadAndDisplay&quot; &lt;&lt; endl;<br />
	 return -1;<br />
	}</p>
<p>	Mat image;<br />
	image = imread(argv[1], CV_LOAD_IMAGE_COLOR);	// Read the file</p>
<p>	if(! image.data )                              // Check for invalid input<br />
	{<br />
		cout &lt;&lt;  &quot;Could not open or find the image&quot; &lt;&lt; std::endl ;<br />
		return -1;<br />
	}</p>
<p>	namedWindow( &quot;Display window&quot;, CV_WINDOW_AUTOSIZE );// Create a window for display.<br />
	imshow( &quot;Display window&quot;, image );                   // Show our image inside it.</p>
<p>	waitKey(0);											 // Wait for a keystroke in the window<br />
	return 0;<br />
}</code><br />
这段程序可以在你安装目录下的samples\cpp\tutorial_code\introduction\display_image找到，编译后，将图片test.jpg放到opencvtest.exe相同的目录中去，利用cmd命令行进入的可执行文件所在的目录，<br />
运行opencvtest test.jpg</p>
<p>则会显示一个图片，第一个程序成功。如图</p>
<p>如果遇到找不到tbb_debug.dll文件的问题，参考这里<a href="http://www.opencv.org.cn/forum/viewtopic.php?p=52223">http://www.opencv.org.cn/forum/viewtopic.php?p=52223</a>，只是我的环境是vs2008，大同小异。祝你成功！</p>
<p>接下来我觉得应该好好研究一下OpenCV里的doc文件夹下的教程和使用手册，我个人觉得《学习OpenCV》这本书已经远远跟不上OpenCV发展的速度了</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2012/01/06/opencv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

