我正在使用C#编写程序来检测纸张边缘并从图像中裁剪出纸张的方形边缘。
下面是我要裁剪的图像。纸张将始终显示在页面底部。
我已经阅读了这些链接,但是我仍然不知道该怎么做。
OpenCV C++/Obj-C: Detecting a sheet of paper / Square Detection
编辑:我正在为此EMR项目使用EMGU
最佳答案
你也可以:
ThresholdBinary
要查看有关查找轮廓的示例,可以查看this帖子。
FundContours
方法不关心轮廓大小。在找到轮廓之前,这里要做的唯一一件事就是通过对图像进行二值化来强调轮廓(我们在步骤2中进行了此操作)。有关更多信息,请参见OpenCV文档:findContours,example。
(在此步骤中,我们遍历所有在轮廓上找到的轮廓,并尝试使用已知的纸张尺寸,比例和相对位置-图像的左下角找出纸张轮廓中的哪一个)。
Image<Gray, byte> grayImage = new Image<Gray, byte>(colorImage);
Image<Bgr, byte> color = new Image<Bgr, byte>(colorImage);
grayImage = grayImage.ThresholdBinary(new Gray(thresholdValue), new Gray(255));
using (MemStorage store = new MemStorage())
for (Contour<Point> contours= grayImage.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_TREE, store); contours != null; contours = contours.HNext)
{
Rectangle r = CvInvoke.cvBoundingRect(contours, 1);
// filter contours by position and size of the box
}
// crop the image using found bounding box
UPD:我添加了更多详细信息。