1,circle()函数

cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int lineType=8, int shift=0)

img为图像指针,单通道多通道都行,不需要特殊要求

center为画圆的圆心坐标

radius为圆的半径

color为设定圆的颜色,比如用CV_RGB(255, 0,0)设置为红色

thickness为设置圆线条的粗细,值越大则线条越粗,为负数则是填充效果

2,cvCreateTrackbar()函数


int cvCreateTrackbar(
const char* trackbar_name, //滑动条的名称
const char* window_name, //窗口的名称,滑动条不会遮挡图像
int* value, //当滑动条被拖到时,OpenCV会自动将当前位置所代表的值传给指针指向的整数
int count, //滑动条所能达到的最大值
CvTrackbarCallback on_change //可选的回调函数,回调函数可参见http://wapedia.mobi/zhtrad/回调函数
);
其中openCV的highgui库提供了两个函数来读取和设置滚动条的value值
//读取value值
int cvGetTrackbarPos(
const char* trackbar_name,
cosnt char* window_name
);
//设置value值
void cvSetTrackbarPos(
const char* trackbar_name,
const char* window_name,
int pos

3,TermCriteria函数

TermCriteria(
int type, // CV_TERMCRIT_ITER, CV_TERMCRIT_EPS, or both
int maxCount,
double epsilon
);
从上面定义中可以看出,这个该类变量需要3个参数,一个是类型,第二个参数为迭代的最大次数,最后一个是特定的阈值。类型有
TermCriteria::COUNT、TermCriteria::EPS、TermCriteria::COUNT+EPS,分别代表着迭代终止条件为达到最大迭代次数终止,迭
代到阈值终止,或者两者都作为迭代终止条件。
算法要么重复或当数后该河段较小的值(分别)。接下来的两设置在其中一个,另一个,或两者的这些条件应终止算法中的值。 我们有两种选择,
原因是这样我们就可以将类型设置为CV_TERMCRIT_ITER|当达到任一限制CV_TERMCRIT_EPS和停止。
4,ipch文件是什么
在使用Visual Studio 2010开发C++程序的时候,会发现有一些奇怪的文件被创建出来,比如一个叫ipch的文件夹,和一个与工程同名的.sdf文件,而且ipch下面的文件和.sdf文件都很大,至少有10M,大项目可能超过100M,那这些文件是干什么用的呢?这些文件是Visual Studio用来保存预编译的头文件和Intellisense用的,删除这些文件对于工程的开发完全没有影响。
5.关于运行程序报错“未定义或为申明的函数或字符”
往往是由于在不同的版本中opencv函数形式会有变化(特别是在opencv2和opencv3之间),或函数调用方式跟版本不匹配,还有一个可能原因是没有添加相应函数坐在库的库文件。
6.调用inintModule_nonfree()
[cpp] 
     
     view plain
     
      copy
     
     
     
     
    
    
   
   
   
   
#include <opencv2/opencv.hpp>  
 
#include <opencv2/nonfree/nonfree.hpp>  
 
#include <opencv2/nonfree/features2d.hpp>  
 
  
 
using namespace cv;  
 
  
 
void main()  
 
{  
 
    Mat image = imread("church01.jpg");  
 
    Mat imageGray = imread("church01.jpg", 0);  
 
    Mat descriptors;  
 
    vector<KeyPoint> keypoints;  
 
    // 新版本2.4.0方法  
 
    initModule_nonfree();  
 
  
 
    Ptr<Feature2D> sift1 = Algorithm::create<Feature2D>("Feature2D.SIFT");  
 
    sift1->set("contrastThreshold", 0.01f);  
 
    (*sift1)(imageGray, noArray(), keypoints, descriptors);  
 
  
 
    // 2.3.1方法  
 
//  SiftFeatureDetector sift2(0.06f, 10.0);  
 
//  sift2.detect(imageGray, keypoints);  
 
      
 
    drawKeypoints(image, keypoints, image, Scalar(255,0,0));  
 
  
 
    imshow("test", image);  
 
    waitKey();  
 
}  
 


 


    
                注意initModule_<modulename>()函数,这个函数要在create前使用,才可以动态的创建算法,不然那个create的指针很野哦。大家都懂的。如果要使用SURF、SIFT算法,就要调用initModule_nonfree(),要使用EM算法,就要先调用initModule_ml()。
   
   
   
   
    
    使用initModule_nonfree()函数要在头文件中加    #include< opencv2/nonfree/nonfree.hpp>