我正在使用OpenCV模板匹配,我遇到了几个错误而且不知道根本原因是什么。我正在使用Eclipse Juno。
包含错误的示例行:
cv::Mat ref = cv::imread("picture.png");
错误:
Invalid arguments '
Candidates are:
? imread(const ? &, int)
'
根据错误,我想在参数中添加一个整数,但这并没有解决问题。我也尝试将字符串放在一个单独的行上并从中拉出地址,但这也无济于事。
我还得到另一个错误:
C:\Users\User\opencv\build\include/opencv/cv.hpp:50:16: fatal error:
cv.h: No such file or directory
#include <cv.h>
^
编译终止。
这可能是真正的问题。我不明白为什么抛出这个错误,因为该库包含在项目中。我甚至尝试自己包含cv.h
和cv.hpp
(不是整个库的一部分),但这只会造成数十个undefined reference
错误。
整个代码:
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv/cv.hpp>
#include <opencv/cv.h>
#include <string.h>
int main()
{
cv::Mat ref = cv::imread("picture.png");
cv::Mat tpl = cv::imread("template.png");
if (ref.empty() || tpl.empty())
return -1;
cv::Mat gref, gtpl;
cv::cvtColor(ref, gref, CV_BGR2GRAY);
cv::cvtColor(tpl, gtpl, CV_BGR2GRAY);
cv::Mat res(ref.rows-tpl.rows+1, ref.cols-tpl.cols+1, CV_32FC1);
cv::matchTemplate(gref, gtpl, res, CV_TM_CCOEFF_NORMED);
cv::threshold(res, res, 0.8, 1., CV_THRESH_TOZERO);
while (true)
{
double minval, maxval, threshold = 0.8;
cv::Point minloc, maxloc;
cv::minMaxLoc(res, &minval, &maxval, &minloc, &maxloc);
if (maxval >= threshold)
{
cv::rectangle(
ref,
maxloc,
cv::Point(maxloc.x + tpl.cols, maxloc.y + tpl.rows),
CV_RGB(0,255,0), 2
);
cv::floodFill(res, maxloc, cv::Scalar(0), 0, cv::Scalar(.1), cv::Scalar(1.));
}
else
break;
}
cv::imshow("reference", ref);
cv::waitKey();
return 0;
}