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>