OpenCV的几个小技巧
申明:以下的小技巧,均为OpenCV2.4.2下验证过的,但并不保证其它版本依然奏效(1)利用数组来构建cv::Mat示例代码如下所示:[cpp]void ArrayToMat(){double m[3][3];for (int i=0; i<3; i++){for (int j=0; j<3; j++){m[i][j] = i+j;cout<<m[i][j]<<" ";}cout<<endl;}cout<<"****************************************"<<endl;Mat M = Mat(3, 3, CV_64F, m);double tempVal = 0.0;for (int i=0; i<3; i++){for (int j=0; j<3; j++){tempVal = M.at<double>(i,j);cout<<tempVal<<" ";}cout<<endl;}}不出意外的话,执行结果应该如下所示:(2) IplImage*跟cv::Mat之间的互相转换示例代码:[cpp]void IplImageToMat(){IplImage* pImg = cvLoadImage("c:/test.jpg");if (!pImg){cout<<"pImg load error"<<endl;system("pause");exit(-1);}cvNamedWindow("pImg", 0);cvNamedWindow("mtx", 0);Mat mtx(pImg);cvShowImage("pImg", pImg);imshow("mtx", mtx);cvWaitKey(0);cvReleaseImage(&pImg);}笔者任意加载了电脑上一副图片,结果如下所示:提醒,这里的格式转换并不申请新的内存,而仅仅是改变数据结构而已(3)Mat转换为IplImge示例代码:[cpp]void MatToIplImage(){Mat m = imread("c:/test.jpg");if (m.empty()){cout<<"mat load error"<<endl;system("pause");exit(-1);}IplImage img1 = IplImage(m);IplImage img2 = m;cvNamedWindow("img1", 0);cvNamedWindow("img2", 0);cvShowImage("img1", &img1);cvShowImage("img2", &img2);cvWaitKey(0);}笔者任意加载一张图片,上述代码的执行结果为:(4)访问二维数据(cv::Mat)最高效的方式是先得到该二维数据的每一行的指针,然后利用下标运算符逐列访问示例代码:[cpp]void MatAccess(){double m[3][3];for (int i=0; i<3; i++){for (int j=0; j<3; j++){m[i][j] = i+j;cout<<m[i][j]<<" ";}cout<<endl;}cout<<"****************************************"<<endl;Mat M = Mat(3, 3, CV_64F, m);double sum = 0;int rows = M.rows;int cols = M.cols;for (int i=0; i<rows; i++){const double* Mi = M.ptr<double>(i);for (int j=0; j<cols; j++){sum += Mi[j];}}cout<<"sum: "<<sum<<endl;}上面的代码执行结果为:(5)cv::Mat支持STL中的迭代器功能示例代码:[cpp]void MatAccess(){double m[3][3];for (int i=0; i<3; i++){for (int j=0; j<3; j++){m[i][j] = i+j;cout<<m[i][j]<<" ";}cout<<endl;}cout<<"****************************************"<<endl;Mat M = Mat(补充:软件开发 , C++ ,
上一个:用指针变量作函数形参接收数组地址
下一个:动态联编和静态联编
- 更多C/C++疑问解答:
- 关于c++的cout输出的问题。
- 在学校里学过C和C++,不过学的很一般,现在自学C#,会不会很难?
- 全国计算机二级C语言笔试题
- 已知某树有2个2度结点,3个3度结点,4个4度结点,问有几个叶子结点?
- c++数据结构内部排序问题,整数排序
- 2012九月计算机二级C语言全国题库,,急求急求
- 如果assert只有一个字符串作为参数,是什么意思呢?
- C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,谢谢了!
- 为什么用结构体编写的程序输入是,0输不出来啊~~~
- 将IEEE—754的十六进制转化为十进制浮点类型,用C或C++都行,多谢各位大侠啊,非常感谢!
- 为什么这个程序求不出公式?
- 这个链表倒置的算法请大家分析下
- c语言函数库调用
- C语言unsigned int纠错
- C语言快排求解啊