我是 OpenCV 的新手,但在谷歌搜索期间我开始了解对象检测和边缘检测。但是,仍然无法找到从屏幕截图中检测图像的正确方法。
例如,如果我像下面这样传递一个内部有照片的图像,那么我需要从源图像中提取该照片。
编辑 遵循@Amitay Nachmani 的回答后,我尝试将以下代码实现到第 4 步。
-(UIImage*)processImage:(UIImage*)sourceImage{
cv::Mat processMat;
UIImageToMat(sourceImage, processMat);
cv::Mat grayImage;
cvtColor(processMat, grayImage, CV_BGR2GRAY);
cv::Mat cannyImage;
cv::Canny(grayImage, cannyImage, 0, 50);
cv::Vec2f lines2;
std::vector<cv::Vec2f> lines;
cv::HoughLines(cannyImage, lines, 1, CV_PI/180, 300);
size_t sizeOfLine = lines.size();
for(size_t i=0;i<sizeOfLine;i++){
float rho = lines[i][0], theta = lines[i][1];
if(rho==0){
cv::Point pt1,pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));
cv::line(cannyImage, pt1, pt2, cv::Scalar(255,0,0),2.0);
}
}
UIImage *result = MatToUIImage(cannyImage);
return result;
}
编辑 2
我通过替换 Condition 修改了代码
if(rho==0)
和 if(theta==0)
但是,接下来要做什么?我对接下来的步骤有点困惑。
最佳答案
我不完全确定,但是您尝试过模板匹配技术吗? 如果您使用 C++ 编写 opencv: http://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html
我希望这有助于找到模板(您的源图像)和您的测试图像(屏幕截图)之间的互相关。
在下面的链接中,您将找到有关如何应用和绘制模板匹配的完整示例。
希望这对您有所帮助。
干杯。
乌奈。
关于ios - 使用 OpenCV 从 UIImage 中检测图像对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39362819/