我的项目需要自动裁剪图像,以消除周围的图纸(晶格)的空白。
下面是我的代码
grayImage = grayImage.ThresholdBinary(new Gray(threshold), new Gray(255));
VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
CvInvoke.FindContours(grayImage, contours, null, RetrType.External, ChainApproxMethod.ChainApproxSimple);
for (int i = 0; i < contours.Size; i++)
{
Rectangle rect = CvInvoke.BoundingRectangle(contours[i]);
if (rect.Width > minWidth && rect.Height > minHeight)
{
CvInvoke.DrawContours(image, contours, i, new MCvScalar(255, 0, 0), 2);
}
}
imageBox.Image = image;
1条答案
按热度按时间zujrkrfu1#
主要问题是
FindContours
找到白色轮廓,图像背景是白色的。我们使用
ThresholdBinaryInv
而不是ThresholdBinary
。ThresholdBinaryInv
应用阈值,并在应用阈值后反转白色(图案将是黑底白字,而不是白底黑字)。代码示例:
结果: