C++ 图片相似度比对(opencv库)

本文介绍了如何使用C++和OpenCV库进行图片相似度比对,详细解析了`namedWindow`、`createTrackbar`、`waitKey`、`Mat::copyTo`等函数的用法,以及`cv::matchTemplate`、`cv::normalize`、`cv::minMaxloc`和`cv::rectangle`在图像匹配过程中的作用。还分享了验证匹配结果的心得体会,并提供了源码demo和开发IDE的相关信息。
摘要由CSDN通过智能技术生成

写在前面

opencv ,它的神秘,让我欣喜,它的奥妙,让我这个学弱望而却步,学习文档还大多是英文的,对于我这种学弱来说,实在是挑战。
也只能偶尔看看资料,发现有趣的demo代码,拿来学习一下,来解决自己内心饥渴。
偶然间发现一段有趣的代码,来与大家分享。

内容简介

操作系统:win7

开发IDE: VS2013

使用的开发库:opencv 2.4.10

使用的语言:C/C++


学习源码

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

/// Global Variables
Mat img; Mat templ; Mat result;
char* image_window = "Source Image";
char* result_window = "Result window";

int match_method;
int max_Trackbar = 5;

/// Function Headers
void MatchingMethod(int, void*);

/** @function main */
int main(int argc, char** argv)
{
	/// Load image and template
	templ = imread("E:/hobby/mhxy/图片识别/图片/1.bmp", 1);
	img = imread("E:/hobby/mhxy/图片识别/测试图片/0001.bmp", 1);

	/// 
	namedWindow(image_window, CV_WINDOW_AUTOSIZE);
	namedWindow(result_window, CV_WINDOW_AUTOSIZE);

	/// Create Trackbar
	char* trackbar_label = "Method: \n 0: SQDIFF \n 1: SQDIFF NORMED \n 2: TM CCORR \n 3: TM CCORR NORMED \n 4: TM COEFF \n 5: TM COEFF NORMED";
	createTrackbar(trackbar_label, image_window, &match_method, max_Trackbar, MatchingMethod);

	MatchingMethod(0, 0);

	waitKey(0);
	return 0;
}

/**
* @function MatchingMethod
* @brief Trackbar callback
*/
void MatchingMethod(int, void*)
{
	/// 源图像显示
	Mat img_display;
	img.copyTo(img_display);

	/// 创建结果矩阵
	int result_cols = img.cols - templ.cols + 1;
	int result_rows = img.rows - templ.rows + 1;

	result.create(result_rows, result_cols, CV_32FC1);

	/// 匹配正常化
	matchTemplate(img, templ, result, match_method);
	normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());

	/// 本地化minMaxLoc的最佳匹配
	double minVal; double maxVal; Point minLoc; Point maxLoc;
	Point matchLoc;

	minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());

	/// For SQDIFF and SQDIFF_NORMED, the best matches are lower values. For all the other methods, the higher the better
	if (match_method == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED)
	{
		matchLoc = minLoc;
	}
	else
	{
		matchLoc = maxLoc;
	}

	/// 告诉我你得到了什么
	rectangle(img_display, matchLoc, Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows), Scalar::all(0), 2, 8, 0);
	rectangle(result, matchLoc, Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows), Scalar::all(0), 2, 8, 0);

	imshow(image_window, img_display);
	imshow(result_window, result);

	return;
}


源码分析

Note: 我们假设读者已经了解图像读取函数

OpenCV人脸识别毕业设计是基于OpenCV和人脸识别算法,实现了对图像或视频中人脸的自动检测和识别。在毕业设计中,我首先学习了OpenCV的基本知识,并研究了人脸检测与识别的原理和算法。 首先,我使用OpenCV的人脸检测器进行人脸的自动检测。通过使用分类器来检测出图像中的人脸区域,然后对检测到的人脸进行标记和定位。 然后,我利用OpenCV中的人脸识别算法,对检测到的人脸进行特征提取和比对。常用的人脸识别算法有Eigenfaces、Fisherfaces和LBPH(局部二值模式直方图)。通过训练样本集,构建人脸特征空间,并将测试样本与已知特征空间进行比对,得出相似度识别结果。 在毕业设计中,我将创建一个图形界面,提供用户友好的操作,可以选择输入图像或视频,然后通过调用OpenCV人脸识别函数,实现对输入数据的人脸检测和识别。通过界面可以实时显示检测到的人脸,以及识别结果或相似度。 为了进一步提高识别准确率和效率,我将采用一些优化方法,如调整分类器的参数,增加训练样本的数量和质量,对人脸图像进行预处理等。此外,我还将进行性能测试,评估人脸识别系统的准确度、召回率、误识率等指标。 通过这个毕业设计,我希望能深入了解和掌握计算机视觉中的人脸识别技术,并通过实际应用中的设计与实现,提高对相关算法和的理解和应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值