> 데이터 베이스 > MySQL 튜토리얼 > OpenCV的几个小技巧

OpenCV的几个小技巧

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-07 15:16:58
원래의
1380명이 탐색했습니다.

申明:以下的小技巧,均为 OpenCV2.4.2 下验证过的,但并不保证其它版本依然奏效 (1)利用数组来构建 cv::Mat 示例代码如下所示: void ArrayToMat(){double m[3][3];for (int i=0; i3; i++){for (int j=0; j3; j++){m[i][j] = i+j;coutm[i][j] ;}coutendl;

申明:以下的小技巧,均为OpenCV2.4.2下验证过的,但并不保证其它版本依然奏效

(1)利用数组来构建cv::Mat

   示例代码如下所示:

void ArrayToMat()
{
	double m[3][3];
	for (int i=0; i(i,j);
			cout
<p>不出意外的话,执行结果应该如下所示:</p>
<p><img  src="/inc/test.jsp?url=http%3A%2F%2Fimg.my.csdn.net%2Fuploads%2F201212%2F15%2F1355541146_2315.png&refer=http%3A%2F%2Fblog.csdn.net%2Fcarson2005%2Farticle%2Fdetails%2F8298453" alt="OpenCV的几个小技巧" ><br>
</p>
<p>(2) IplImage*<span>跟</span><span>cv::Mat</span><span>之间的互相转换</span></p>
<p>示例代码:</p>
<pre class="brush:php;toolbar:false">void IplImageToMat()
{
	IplImage* pImg = cvLoadImage("c:/test.jpg");
	if (!pImg)
	{
		cout
<p>笔者任意加载了电脑上一副图片,结果如下所示:</p>
<img  src="/inc/test.jsp?url=http%3A%2F%2Fimg.my.csdn.net%2Fuploads%2F201212%2F15%2F1355541209_9786.png&refer=http%3A%2F%2Fblog.csdn.net%2Fcarson2005%2Farticle%2Fdetails%2F8298453" alt="OpenCV的几个小技巧" ><br>
<p>提醒,这里的格式转换并不申请新的内存,而仅仅是改变数据结构而已</p>

<p>(3)Mat<span>转换为</span><span>IplImge</span></p>
<p>示例代码:</p>
<pre class="brush:php;toolbar:false">void MatToIplImage()
{
	Mat m = imread("c:/test.jpg");
	if (m.empty())
	{
		cout
<p>笔者任意加载一张图片,上述代码的执行结果为:</p>
<img  src="/inc/test.jsp?url=http%3A%2F%2Fimg.my.csdn.net%2Fuploads%2F201212%2F15%2F1355541209_9786.png&refer=http%3A%2F%2Fblog.csdn.net%2Fcarson2005%2Farticle%2Fdetails%2F8298453" alt="OpenCV的几个小技巧" ><br>
<p>(4)访问二维数据(<span>cv::Mat</span><span>)最高效的方式是先得到该二维数据的每一行的指针,然后利用下标运算符逐列访问</span></p>
<p>示例代码:</p>
<pre class="brush:php;toolbar:false">void MatAccess()
{
	double m[3][3];
	for (int i=0; i(i);
		for (int j=0; j<cols j sum mi cout>
<p>上面的代码执行结果为:</p>
<img  src="/inc/test.jsp?url=http%3A%2F%2Fimg.my.csdn.net%2Fuploads%2F201212%2F15%2F1355541319_9708.png&refer=http%3A%2F%2Fblog.csdn.net%2Fcarson2005%2Farticle%2Fdetails%2F8298453" alt="OpenCV的几个小技巧" ><br>
<p>(5)cv::Mat<span>支持</span><span>STL</span><span>中的迭代器功能</span></p>
<p>示例代码:</p>
<pre class="brush:php;toolbar:false">void MatAccess()
{
	double m[3][3];
	for (int i=0; i(i);
		for (int j=0; j<cols j sum mi cout matconstiterator_> it = M.begin<double>();
	MatConstIterator_<double> itEnd = M.end<double>();
	for (;it!=itEnd; it++)
	{
		sum += *it;
	}
	cout
<p>运行结果:</p>
<img  src="/inc/test.jsp?url=http%3A%2F%2Fimg.my.csdn.net%2Fuploads%2F201212%2F15%2F1355541377_4184.png&refer=http%3A%2F%2Fblog.csdn.net%2Fcarson2005%2Farticle%2Fdetails%2F8298453" alt="OpenCV的几个小技巧" ><br>
<p>(6) satureat_cast : openCV<span>中用于数据“饱和”判断</span></p>
<p>示例:</p>
<pre class="brush:php;toolbar:false">void Saturate_castTest()
{
	int r = 300;
	uchar t = saturate_cast<uchar>(r);
	cout
<p>结果:</p>
<img  src="/inc/test.jsp?url=http%3A%2F%2Fimg.my.csdn.net%2Fuploads%2F201212%2F15%2F1355541432_7328.png&refer=http%3A%2F%2Fblog.csdn.net%2Fcarson2005%2Farticle%2Fdetails%2F8298453" alt="OpenCV的几个小技巧" ><br>
<p>(7)获取函数执行时间</p>
<p><span>getTickCount</span>()和<span>getTickFrequency</span>()结合起来可以用来计算函数执行时间,尤其是很小的代码片段的执行时间</p>
<p>举例:</p>
<pre class="brush:php;toolbar:false">void GetFuncTime()
{
	double exec_time = (double)getTickCount();
	for (int i=0; i
<p>上面的代码,重点在于for<span>循环,且,该循环中什么也不处理;用一般的时间函数很难计算出该代码片段的执行时间,但利用</span><span>getTickCount</span><span>()和</span><span>getTickFrequency</span><span>()就很容易。笔者电脑上的结果是:</span></p>
<img  src="/inc/test.jsp?url=http%3A%2F%2Fimg.my.csdn.net%2Fuploads%2F201212%2F15%2F1355541488_8158.png&refer=http%3A%2F%2Fblog.csdn.net%2Fcarson2005%2Farticle%2Fdetails%2F8298453" alt="OpenCV的几个小技巧" ><br>
<br>
<br>


로그인 후 복사
관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿