OpenCV库包含设置技巧与图像金字塔

http://www.verydemo.com/demo_c374_i20621.html

推荐:OpenCV各版本学习官方材料(Tutorial,UserGuide等)http://opencv.org/documentation.html

(一)OpenCV库包含设置技巧

1.再也不需要每次添加包含目录和库目录、添加附加库

(1)打开任意一个工程

(2)View|Property Manager打开或者直接在左栏切换到Property Manager视图,右键Property,打开了一个咱们每次工程属性中设置的页面,在这里进行我们平时重复进行的那些设置

右键|属性,VC++目录|包含目录,加上以下3条路径:

X:\Program Files (x86)\opencv2.4.3\opencv\build\include

X:\Program Files (x86)\opencv2.4.3\opencv\build\include\opencv

X:\Program Files (x86)\opencv2.4.3\opencv\build\include\opencv2

再在VC++目录|库目录加入一条路径:

X:\Program Files (x86)\opencv2.4.3\opencv\build\x86\vc10\lib

项目|右键|Properties|Linker|Input|Additional Dependencies中加入:

Debug中:

复制代码
查看文本 打印
  1. opencv_calib3d243d.lib   
  2.   
  3. opencv_contrib243d.lib   
  4.   
  5. opencv_core243d.lib   
  6.   
  7. opencv_features2d243d.lib   
  8.   
  9. opencv_flann243d.lib   
  10.   
  11. opencv_gpu243d.lib   
  12.   
  13. opencv_haartraining_engined.lib   
  14.   
  15. opencv_highgui243d.lib   
  16.   
  17. opencv_imgproc243d.lib   
  18.   
  19. opencv_legacy243d.lib   
  20.   
  21. opencv_ml243d.lib   
  22.   
  23. opencv_nonfree243d.lib   
  24.   
  25. opencv_objdetect243d.lib   
  26.   
  27. opencv_photo243d.lib   
  28.   
  29. opencv_stitching243d.lib   
  30.   
  31. opencv_ts243d.lib   
  32.   
  33. opencv_video243d.lib   
  34.   
  35. opencv_videostab243d.lib  
复制代码

后边的d代表Debug

这时,这些库就成为了我们每次可以inherit(继承)的库。不过这对我们Release的设置可不妙哦,因为它同样也会继承,解决办法是切换到Release,然后取消inherit的勾选,将必要的(添加Debug中那些OpenCV以外系统默认有的库)以及我们Release对应的库(名字末尾没有d,如下所示):

复制代码
查看文本 打印
  1. opencv_calib3d243.lib   
  2. opencv_contrib243.lib   
  3. opencv_core243.lib   
  4. opencv_features2d243.lib   
  5. opencv_flann243.lib   
  6. opencv_gpu243.lib   
  7. opencv_haartraining_engine.lib   
  8. opencv_highgui243.lib   
  9. opencv_imgproc243.lib   
  10. opencv_legacy243.lib   
  11. opencv_ml243.lib   
  12. opencv_nonfree243.lib   
  13. opencv_objdetect243.lib   
  14. opencv_photo243.lib   
  15. opencv_stitching243.lib   
  16. opencv_ts243.lib   
  17. opencv_video243.lib   
  18. opencv_videostab243.lib  
复制代码

这样就通通OK啦。

(二)图像金字塔构建 

(1)在OpenCV的C版本中,函数名字普遍地具有前缀cv,且单词的首字母大写(比如cvPryDown);而我们的2.4.3为小写首个单词(pyrDown),为方便书写,我们加上using namespace cv;以免去每次写cv::的辛劳

(2)由于版本的变化中变量已经大大改变(读取图像由IplImage*变为Mat),相应函数也发生变化:

新版本(2.4.3)

复制代码
查看文本 打印
  1. //! smooths and downsamples the image  
  2. CV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,  
  3.                            const Size& dstsize=Size(), int borderType=BORDER_DEFAULT );  
  4. //! upsamples and smoothes the image  
  5. CV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst,  
  6.                          const Size& dstsize=Size(), int borderType=BORDER_DEFAULT );  
  7.   
  8. //! builds the gaussian pyramid using pyrDown() as a basic operation  
  9. CV_EXPORTS void buildPyramid( InputArray src, OutputArrayOfArrays dst,  
  10.                               int maxlevel, int borderType=BORDER_DEFAULT );  
复制代码

老版本

复制代码
查看文本 打印
  1. PyrDown  
  2.   
  3. 图像的下采样  
  4. void cvPyrDown( const CvArr* src, CvArr* dst, int filter=CV_GAUSSIAN_5x5 );  
  5. src  
  6. 输入图像.  
  7. dst  
  8. 输出图像, 宽度和高度应是输入图像的一半 ,传入前必须已经完成初始化  
  9. filter  
  10. 卷积滤波器的类型,目前仅支持 CV_GAUSSIAN_5x5  
  11. 函数 cvPyrDown 使用 Gaussian 金字塔分解对输入图像向下采样。首先它对输入图像用指定滤波器进行卷积,然后通过拒绝偶数的行与列来下采样图像。  
  12.   
  13.   
  14. PyrUp  
  15. 图像的上采样  
  16. void cvPyrUp( const CvArr* src, CvArr* dst, int filter=CV_GAUSSIAN_5x5 );  
  17. src  
  18. 输入图像.  
  19. dst  
  20. 输出图像, 宽度和高度应是输入图像的2倍  
  21. filter  
  22. 卷积滤波器的类型,目前仅支持 CV_GAUSSIAN_5x5  
  23.   
  24. 函数 cvPyrUp 使用Gaussian 金字塔分解对输入图像向上采样。首先通过在图像中插入值为 0的 偶数行和偶数列,然后对得到的图像用指定的滤波器进行高斯卷积,其中滤波器乘以4做插值。所以输出图像是输入图像的 4 倍大小。  
复制代码

以创建金字塔为例博主写了一段代码测试功能,上代码~~~

复制代码
查看文本 打印
  1. // MyMatch0502.cpp : Defines the entry point for the console application.  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include   
  6. #include   
  7. #include   
  8.   
  9.   
  10.   
  11. using namespace std;  
  12. using namespace cv;  
  13.    
  14. int _tmain(int argc, _TCHAR* argv[])  
  15. {  
  16.     Mat image=imread("D:\\Programing\\u0367panLeft.bmp");  
  17.     Mat image_dst;  
  18.     vector MatArray;  
  19.   
  20.      if( !image.data )  
  21.     { printf(" No data! -- Exiting the program \n");  
  22.       return -1; }  
  23.   
  24.     pyrDown( image, image_dst,Size( image.cols/2, image.rows/2 ) );  
  25.     buildPyramid( image , MatArray , 3);  
  26.       
  27.   
  28.     namedWindow( "image", CV_WINDOW_AUTOSIZE );  
  29.     namedWindow( "image_dst", CV_WINDOW_AUTOSIZE );  
  30.     namedWindow( "MatArray0", CV_WINDOW_AUTOSIZE );  
  31.     namedWindow( "MatArray1", CV_WINDOW_AUTOSIZE );  
  32.     namedWindow( "MatArray2", CV_WINDOW_AUTOSIZE );  
  33.     namedWindow( "MatArray3", CV_WINDOW_AUTOSIZE );  
  34.   
  35.     imshow("image", image);  
  36.     imshow("image_dst", image_dst);  
  37.      imshow("MatArray0", MatArray.at(0));  
  38.     imshow("MatArray1", MatArray.at(1));  
  39.     imshow("MatArray2", MatArray.at(2));  
  40.     imshow("MatArray3", MatArray.at(3));  
  41.   
  42.     //此函数等待按键,按键盘任意键就返回  
  43.     waitKey();  
  44.   
  45.   
  46.     return 0;  
  47. }  
复制代码

得到效果图:

图像金字塔MatArray0为原始图像,MatArray1-3分别为三层金字塔。MatArray的大小为

void buildPyramid( InputArray src, OutputArrayOfArrays dst,
                              int maxlevel, int borderType=BORDER_DEFAULT );

中的 maxlevel+1,MatArray.at(0)即原图,maxlevel为金字塔的层数,dst是个size为maxlevel+1的vector。

如上,可以看出buildPyramid的MatArray.at(1)与pyrDown( image, image_dst,Size( image.cols/2, image.rows/2 ) );的结果是一样的。就是第一层是缩小了2倍。

 

 如上,原始影像与MatArray.at(0)也一样

 再附上加上滑动轴显示金字塔不同层次效果代码:

复制代码
查看文本 打印
  1. // MyMatch0502.cpp : Defines the entry point for the console application.  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include   
  6. #include   
  7.   
  8. using namespace std;  
  9. using namespace cv;  
  10.   
  11.   
  12. /// 全局变量的声明与初始化  
  13. const int slider_max = 5;  
  14. int slider_value;  
  15. double alpha;  
  16. double beta;  
  17.   
  18. /// 声明存储图像的变量  
  19. Mat image;  
  20. vector MatArray;  
  21.   
  22. /** 
  23.  * @function on_trackbar 
  24.  * @定义响应滑动条的回调函数 
  25.  */  
  26.   
  27. void on_trackbar( intvoid* )  
  28. {   
  29.  buildPyramid( image , MatArray , slider_value);  
  30.  imshow("buildPyramid", MatArray.at(slider_value));  
  31. }  
  32.   
  33.   
  34. int _tmain(int argc, _TCHAR* argv[])  
  35. {  
  36.     image=imread("D:\\Programing\\u0367panLeft.bmp");  
  37.   
  38.      if( !image.data )  
  39.     { printf(" No data! -- Exiting the program \n");  
  40.       return -1; }  
  41.   
  42.     namedWindow( "buildPyramid", CV_WINDOW_AUTOSIZE );  
  43.   
  44.     createTrackbar("Threshold1""buildPyramid",     
  45.         &slider_value,slider_max,on_trackbar);    
  46.   
  47.     // 结果在回调函数中显示  
  48.     on_trackbar( slider_value, 0 );  
  49.   
  50.     //此函数等待按键,按键盘任意键就返回  
  51.     waitKey();  
  52.     return 0;  
  53. }  
复制代码

 

 


你可能感兴趣的:(openCV算法,opencv)