我问了前面的一个问题here,根据答案中的建议,我构建了下面的程序,我认为该程序可以检测出大矩形,但它根本检测不到矩形。不过,它确实在这个image上起作用。
我希望解决方案不仅适用于此图像,而且适用于此类不同的图像。下面代码的主要部分来自不同的答案
我的完整计划:#include
#include
using namespace cv;
using namespace std;
double angle( Point pt1, Point pt2, Point pt0 ) {
double dx1 = pt1.x - pt0.x;
double dy1 = pt1.y - pt0.y;
double dx2 = pt2.x - pt0.x;
double dy2 = pt2.y - pt0.y;
return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10);
}
void find_squares( Mat& image, vector< vector< Point> >& squares)
{
// blur will enhance edge detection
Mat blurred(image);
medianBlur(image, blurred, 9);
Mat gray0(blurred.size(), CV_8U), gray;
vector< vector< Point> > conto