Android 图像处理:在打开的书中找到突出的页面并进行透视变换

Android 图像处理:在打开的书中找到突出的页面并进行透视变换,android,image,opencv,image-processing,edge-detection,Android,Image,Opencv,Image Processing,Edge Detection,我必须让这张图片中有一页书名为“第三单元:积极学习的秘密”的书成为图片中唯一的一页 为此,我需要删除另一个页面的一部分,这也是在图像中 我需要编写一个通用代码,可以为许多类似的图像这样做 我尝试使用Canny边缘检测,但它无法检测到我想要的页面 如果有人能帮助指导我,我可以用什么来实现这一点,我将不胜感激 提前谢谢 [编辑] 这基本上就是我使用Canny边缘检测器所做的 Imgproc.Canny(gray,canny,0,50); Imgproc.findCon

我必须让这张图片中有一页书名为“第三单元:积极学习的秘密”的书成为图片中唯一的一页

为此,我需要删除另一个页面的一部分,这也是在图像中

我需要编写一个通用代码,可以为许多类似的图像这样做

我尝试使用Canny边缘检测,但它无法检测到我想要的页面

如果有人能帮助指导我,我可以用什么来实现这一点,我将不胜感激

提前谢谢

[编辑]

这基本上就是我使用Canny边缘检测器所做的

        Imgproc.Canny(gray,canny,0,50);
        Imgproc.findContours(canny, contours, hierarchy,
                Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
        for(int i=0;i<contours.size();i++){
            double temp=Imgproc.contourArea(contours.get(i));
            if(temp>100){
                if(temp>largestArea){
                    largestArea=temp;
                    largestAreaIndex=i;
                }
            }
        }
        m2f=new MatOfPoint2f(contours.get(largestAreaIndex).toArray());
        arc=Imgproc.arcLength(m2f,true);
        Imgproc.approxPolyDP(m2f,approx,0.02*arc,true);
        if(approx.toList().size()==4){
            Imgproc.drawContours(img,contours,largestAreaIndex,new Scalar(255,255,255));
        }
Imgproc.Canny(灰色,Canny,0,50);
Imgproc.findContours(坎尼、轮廓、层次、,
Imgproc.RETR\u列表、Imgproc.CHAIN\u近似值\u简单值);
对于(int i=0;i100){
如果(温度>大面积){
大面积=温度;
大妊娠指数=i;
}
}
}
m2f=新的MatOfPoint2f(courts.get(largestreaIndex.toArray());
弧=Imgproc.弧长(m2f,真);
Imgproc.近似聚合度(m2f,约0.02弧,真);
如果(大约toList().size()==4){
img绘制等高线(img,等高线,大面积指数,新标量(255255));
}

将图像切成垂直条带。在每个条带中,消除顶部和底部的黑色区域。然后估计条带或类似活动指示器中的灰度值方差(或梯度模量方差)。这将显示空条,这应该足以大致检测到正确的页面


关于透视变换的提示:使用高结构元素执行侵蚀,以便来自连续行的字符合并。这将创建强边,为您提供垂直方向


也许你应该从基本知识开始?你的问题也太宽泛了。“我试过使用Canny”也没有表现出你方太多的努力。嘿@Pieget请检查我的编辑。谢谢请阅读