这是求周长的函数:
float perimeter(const vector<Point2f> &a)//求多边形周长。
{
float sum = 0, dx, dy;
for (size_t i = 0;i<a.size();i++)
{
size_t i2 = (i + 1) % a.size();
dx = a[i].x - a[i2].x;
dy = a[i].y - a[i2].y;
sum += sqrt(dx*dx + dy*dy);
}
return sum;
}
然后就可以看到结果,原来能检测到的两个矩形,只剩下一个了:
接下来就是进行仿射变换:
for (size_t i = 0; i < rotateRects.size(); i++)
{
Mat dst(g_src.size(),g_src.type());
Mat rotMat(2, 3, CV_32FC1);
float r = (float)rotateRects[i].size.width / (float)rotateRects[i].size.height;
float angle = rotateRects[i].angle;
if (r < 1)
angle = angle + 90; //修正角度
rotMat = getRotationMatrix2D(rotateRects[i].center, angle, 1);
warpAffine(g_src, dst, rotMat, dst.size());
imshow("最终图像", dst);
Mat dst1;
getRectSubPix(dst, rotateRects[i].size, rotateRects[i].center, dst1); //裁剪矩形
imshow("最终图像2", dst1);
}
然后得到最终结果:
可以看到我们已经将图片修正
接下来是贴出完整代码:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-78133-3.html
苹果手机更新系统后又有好玩的了
写得不好
好想去
5毛钱都不给我