Heim >Datenbank >MySQL-Tutorial >OpenCV的几个小技巧
申明:以下的小技巧,均为 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>