我在我的测试应用程序中成功实现了OpenCV平方检测示例,但现在需要过滤输出,因为它非常混乱 - 或者我的代码是错误的?
我对本文的四个角点感兴趣,以减少偏斜(如此)和进一步处理......
原始图片:
码:
double angle( cv::Point pt1, cv::Point pt2, cv::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);
}
- (std::vector<std::vector<cv::Point> >)findSquaresInImage:(cv::Mat)_image
{
std::vector<std::vector<cv::Point> > squares;
cv::Mat pyr, timg, gray0(_image.size(), CV_8U), gray;
int thresh = 50, N = 11;
cv::pyrDown(_image, pyr, cv::Size(_image.cols/2, _image.rows/2));
cv::pyrUp(pyr, …Run Code Online (Sandbox Code Playgroud) 我想制作一个类似凸轮扫描仪的应用程序来裁剪文档.
但我需要像我的两个图像一样的功能..
第一张图像显示相机拍摄的图像..

第二个图像像这样识别捕获的图像部分.

我研究得越来越多,但没有得到任何外出,所以,我在这里问,是否有任何人这样做告诉我..
谢谢
我在android平台上使用openCV库.我已成功检测到图像中最大的矩形,但由于我的应用程序将用于扫描目的,我还希望获得透视更改功能.
我知道,如何应用perspectiveTransform和warpPerspectiveTransform,但为此我将需要源点的矩形角.
考虑到我们拥有与Rect对象相关的第一个角(左上角)和宽度/高度的坐标这一事实似乎很容易找到角落,但问题是,对于旋转的矩形(通常的boundingRect但是不平行的边) ()),这些值是非常不同的.在这种情况下,它存储对应于另一个矩形的值,该矩形的边与轴平行并覆盖旋转的矩形,这使我无法检测实际矩形的角.
另外,我想对这两种算法进行比较,以便从图像中检测纸张.
Canny edge - >最大轮廓 - >最大矩形 - >查找角落 - >透视变化
Canny edge-> Hough lines - >线的交点 - >透视变化
如果我们有一个Rect对象,如何获得该矩形的所有角落,我想问的问题是什么?
提前致谢.