我目前正在嘗試使用OpenCV模板匹配函數來檢測給定圖像中使用模板中的所有相似對象。但是,即使它們非常相似和相同,我也沒有得到所有的物體(即血細胞)。我一直在互聯網上尋找解決方案,但沒有得到任何答案。OpenCV模板匹配類似的對象
以下是我的代碼:
cv::Mat ref = cv::imread("c:\\image.jpg");
cv::Mat tpl = cv::imread("c:\\template.jpg");
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);
這些是用於結果和圖像:
給定圖像
模板
結果與較高的閾值設置(0.8/0.8)
結果具有較低的閾值設置(0.6/0.3)
我非常新的模板匹配,是有沒有辦法讓圖像中的所有對象都被檢測到?
我需要模板匹配來檢測一些更復雜的圖像中的單元格。
更改閾值? – nbsrujan
我試圖降低閾值,但仍然沒有檢測到所有對象 – Woody
您可以上傳res圖像 – nbsrujan