CamShift算法
void CMFCworkDlg::OnBnClickedButton16()
{
// TODO: 在此添加控件通知处理程序代码
//Load Image
Mat src1 = imread("1.1.jpg", 1);
Mat src2 = imread("1.2.jpg", 1);
imshow("src1", src1);
imshow("src2", src2);
if (!src1.data || !src2.data)
{
_cprintf(" --(!) Error reading images \n");
return;
}
//sift feature detect
Ptr<SIFT> siftdetector = SIFT::create();
vector<KeyPoint> kp1, kp2;
siftdetector->detect(src1, kp1);
siftdetector->detect(src2, kp2);
Mat des1, des2;//descriptor
siftdetector->compute(src1, kp1, des1);
siftdetector->compute(src2, kp2, des2);
Mat res1, res2;
drawKeypoints(src1, kp1, res1);//在内存中画出特征点
drawKeypoints(src2, kp2, res2);
_cprintf("size of description of Img1: %d\n", kp1.size());
_cprintf("size of description of Img2: %d\n", kp2.size());
Mat transimg1, transimg2;
transimg1 = res1.clone();
transimg2 = res2.clone();
char str1[20], str2[20];
sprintf_s(str1, "%d", kp1.size());
sprintf_s(str2, "%d", kp2.size());
const char* str = str1;
putText(transimg1, str1, Point(280, 230), 0, 1.0, Scalar(255, 0, 0), 2);//在图片中输出字符
str = str2;
putText(transimg2, str2, Point(280, 230), 0, 1.0, Scalar(255, 0, 0), 2);//在图片中输出字符
//imshow("Description 1",res1);
imshow("descriptor1", transimg1);
imshow("descriptor2", transimg2);
BFMatcher matcher(NORM_L2, true);
vector<DMatch> matches;
matcher.match(des1, des2, matches);
Mat img_match;
drawMatches(src1, kp1, src2, kp2, matches, img_match);//,Scalar::all(-1),Scalar::all(-1),vector<char>(),drawmode);
_cprintf("number of matched points: %d\n", matches.size());
imshow("matches", img_match);
waitKey(10);
参考前文百度链接