我已经使用OpenCV框架设置了一个应用程序,以使用相机检测图像标记,然后在屏幕上的图像与标记匹配时做出反应。 到目前为止,我已经掌握了以下方法:
https://medium.com/@dwayneforde/image-recognition-on-ios-with-swift-and-opencv-b5cf0667b79
并且还使用了他的代码来实现图像匹配功能。一切都已设置好,我应该可以开始了……但是……当尝试运行应用程序时,该应用程序崩溃了。
问题出在我检查比赛的地方。我按照本教程中的说明使用此代码:
- (void)processImage:(cv::Mat &)img {
cv::Mat gimg;
// Convert incoming img to greyscale to match template
cv::cvtColor(img, gimg, CV_BGR2GRAY);
// Use check for matches with a certain threshold to help with scaling and angles
cv::Mat res(img.rows-gtpl.rows+1, gtpl.cols-gtpl.cols+1, CV_32FC1);
cv::matchTemplate(gimg, gtpl, res, CV_TM_CCOEFF_NORMED);
cv::threshold(res, res, 0.5, 1., CV_THRESH_TOZERO);
double minval, maxval, threshold = 0.9;
cv::Point minloc, maxloc;
cv::minMaxLoc(res, &minval, &maxval, &minloc, &maxloc);
// If it's a good enough match
if (maxval >= threshold)
{
// Draw a rectangle for confirmation
cv::rectangle(img, maxloc, cv::Point(maxloc.x + gtpl.cols, maxloc.y + gtpl.rows), CV_RGB(0,255,0), 2);
cv::floodFill(res, maxloc, cv::Scalar(0), 0, cv::Scalar(.1), cv::Scalar(1.));
// Call our delegates callback method
[delegate matchedItem];
}
}
问题似乎出在线路上
cv::matchTemplate(gimg, gtpl, res, CV_TM_CCOEFF_NORMED);
我得到这个错误消息:
OpenCV(3.4.1)错误:断言失败(crossr),文件/卷中的声明失败(corrsize.height <= img.rows + templ.rows-1 && corrsize.width <= img.cols + templ.cols-1) /build-storage/build/master_iOS-mac/opencv/modules/imgproc/src/templmatch.cpp,第589行
libc ++ abi.dylib:以cv :: Exception类型的未捕获异常终止:OpenCV(3.4.1)/ Volumes / build-storage / build / master_iOS-mac / opencv / modules / imgproc / src / templmatch。 cpp:589:错误:(-215)corrsize.height <= img.rows + templ.rows-1 && corrsize.width <= img.cols + templ.cols-函数crossCorr中的1
有人可以看到我在做什么吗?