cv::getTickCount
为opencv中用于获取当前系统时钟周期的函数,它通常用于性能分析和计时器,函数返回64位整数,代表了自系统启动以来经过的时钟周期数。
通常情况下,将cv::getTickCount和cv::getTickFrequency 结合使用,后者用于获取时钟的周期频率,将时钟周期转化为秒或毫秒。
#include <iostream>
#include <opencv2/opencv.hpp>
int main() {
// 获取开始时钟周期数
int64 start = cv::getTickCount();
// 在这里执行你的代码片段
// ...
// 获取结束时钟周期数
int64 end = cv::getTickCount();
// 获取时钟周期的频率
double frequency = cv::getTickFrequency();
// 计算执行时间(以秒为单位)
double duration = (end - start) / frequency;
std::cout << "Execution time: " << duration << " seconds" << std::endl;
return 0;
}
cv::minMaxLoc
用于查找图像中的最小值和最大值及其对应的位置,函数原型如下:
void minMaxLoc(InputArray src, double* minVal, double* maxVal, Point* minLoc=NULL, Point* maxLoc=NULL, InputArray mask=noArray());
src:输入的单通道图像。
minVal:指向返回的最小值的指针,如果不需要最小值,可以传入nullptr。
maxVal:指向返回的最大值的指针,如果不需要最大值,可以传入nullptr。
minLoc:指向返回的最小值的位置的指针,如果不需要最小值的位置,可以传入nullptr。
maxLoc:指向返回的最大值的位置的指针,如果不需要最大值的位置,可以传入nullptr。
mask:可选参数,用于指定要考虑的区域。如果不需要,则可以传入默认值。
当使用cv::matchTemplate 函数来进行模板匹配时,通常会得到一个匹配结果图像,为了找到最佳匹配位置,可以使用cv::minMaxLoc函数来找到这个匹配结果图像的最大最小值以及这个最值所在位置。例如:
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读取输入图像和模板图像
Mat inputImage = imread("input_image.jpg", IMREAD_COLOR);
Mat templateImage = imread("template_image.jpg", IMREAD_COLOR);
// 确保图像读取成功
if (inputImage.empty() || templateImage.empty()) {
std::cerr << "Failed to read image files!" << std::endl;
return -1;
}
// 创建匹配结果图像
Mat resultImage;
// 使用模板匹配方法进行匹配
matchTemplate(inputImage, templateImage, resultImage, TM_CCOEFF_NORMED);
// 定义变量来存储最大值和最大值位置
double maxVal;
Point maxLoc;
// 找到匹配结果图像中的最大值及其位置
minMaxLoc(resultImage, nullptr, &maxVal, nullptr, &maxLoc);
// 在原始图像中绘制矩形框标记匹配位置
rectangle(inputImage, maxLoc, Point(maxLoc.x + templateImage.cols, maxLoc.y + templateImage.rows), Scalar(0, 255, 0), 2);
// 显示结果
imshow("Input Image", inputImage);
waitKey(0);
return 0;
}