如何使用OpenCVSharp在C#中找到最小面积矩形?
我需要从白色位图画布中提取一个黑白图像(签名),并将其调整到特定尺寸。图像(sig)保证在白色背景上为黑色 原因是,当我们捕获签名时,有些人写得很小,而另一些人则填充了捕获区域。但是,我需要它们全部填充另一幅图像的边缘,以便进一步处理 我需要找到签名的X/Y坐标/矩形边界,这样我就可以只提取画布的那一部分,而不会在周围留下大量空白 我在另一个项目中注意到了这一点,我想知道如何在OpenCVSharp中实现如何使用OpenCVSharp在C#中找到最小面积矩形?,c#,opencv,image-processing,opencvsharp,opencvdotnet,C#,Opencv,Image Processing,Opencvsharp,Opencvdotnet,我需要从白色位图画布中提取一个黑白图像(签名),并将其调整到特定尺寸。图像(sig)保证在白色背景上为黑色 原因是,当我们捕获签名时,有些人写得很小,而另一些人则填充了捕获区域。但是,我需要它们全部填充另一幅图像的边缘,以便进一步处理 我需要找到签名的X/Y坐标/矩形边界,这样我就可以只提取画布的那一部分,而不会在周围留下大量空白 我在另一个项目中注意到了这一点,我想知道如何在OpenCVSharp中实现 谢谢。编辑:正如Miki在评论中指出的,您可能正在搜索旋转框。您可能需要OpenCvSh
谢谢。编辑:正如Miki在评论中指出的,您可能正在搜索旋转框。您可能需要
OpenCvSharp.Cv.minarealect2()
,它获取点的CvArr
,并返回CvBox2D
边界框的计算相对简单,只要您不担心边界框中的倾斜,找到最小封闭矩形就是找到对应于黑色像素的最小和最大x和y。最简单的方法如下:
//您实际上会使用您的图像
位图b=新位图(640480);
//为演示生成一些随机数据
随机r=新随机();
对于(int i=0;i<1000;i++)
{
b、 设置像素(r.Next(200)+50,r.Next(200)+50,彩色。黑色);
}
int minX,minY;
int-maxX,maxY;
minX=minY=int.MaxValue;
maxX=maxY=int.MinValue;
//找到最小和最大黑色坐标
对于(int x=0;xmaxX)maxX=x;
如果(xmaxY)maxY=y;
如果(y
诚然,这不是最干净的实现,但任何搜索最小值和最大值的算法都会起作用。(你只需要对两个维度都这样做。)我假设opencvsharp只是opencv的一个c#wrrapper。如果是这样,只需调用任何包装cv::Minareact()的函数即可。OP要求使用面向最小值的边界框。所以你还需要计算凸包和旋转卡钳。或者只需调用包装cv::Minarealecti的函数就可以了,因为它不关心倾斜,所以位图搜索概念只需稍加调整就可以很好地工作。非常感谢他们!