1.角点的检测
主要的实现函数为cvGoodFeaturesToTrack
2.进度条
主要的实现函数为cvCreateTrackbar("ccc","Original",&value,count,0);//注意ccc是进度条的名称,可以显示在图上;Original是视窗的名称
示例代码:
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
IplImage* src = cvLoadImage("D:\\PERSONAL\\Picture\\jiaodianDemo.jpg",CV_LOAD_IMAGE_UNCHANGED);
IplImage* src_1 = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
IplImage* src_32 = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
cvCvtColor(src,src_1,CV_BGR2GRAY);
cvCvtScale(src_1,src_32,1.0,0.0);//将八位图像转化为32位
//角点检测
IplImage* eigImage = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);//eigImage和tempImage都是32F,大小个src相同
IplImage* tempImage = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);//输入src可以是8U或者32F
CvPoint2D32f corners[50] = {NULL};
double quality_level = 0.01;//
double min_distance = 20;//返回角点之间的距离不小于min_distance
int block_size = 3;
double k = 0.04;
int corner_count = 0;
//实现函数
cvGoodFeaturesToTrack(
src_32,
eigImage,
tempImage,
corners,
&corner_count,
quality_level,
min_distance);//其余参数默认
for( int i = 0; i < corner_count; i++ ){
cvCircle(src,cvPoint(cvRound(corners[i].x),cvRound(corners[i].y)),5,CV_RGB(255,0,0),2);
}
//显示处理结果
cvNamedWindow("Original");
cvShowImage("Original",src);
//绘制进度条,在本例中无用,纯粹为了试试效果
int value(0);//进度条的当前值
int count = 10;//进度条的最大值
cvCreateTrackbar("ccc","Original",&value,count,0);//注意 &value 的写法
cvWaitKey(0);
cvReleaseImage(&src);
cvDestroyWindow("Original");
return 0;
}