Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用OpenCVSharp在C#中找到最小面积矩形?_C#_Opencv_Image Processing_Opencvsharp_Opencvdotnet - Fatal编程技术网

如何使用OpenCVSharp在C#中找到最小面积矩形?

如何使用OpenCVSharp在C#中找到最小面积矩形?,c#,opencv,image-processing,opencvsharp,opencvdotnet,C#,Opencv,Image Processing,Opencvsharp,Opencvdotnet,我需要从白色位图画布中提取一个黑白图像(签名),并将其调整到特定尺寸。图像(sig)保证在白色背景上为黑色 原因是,当我们捕获签名时,有些人写得很小,而另一些人则填充了捕获区域。但是,我需要它们全部填充另一幅图像的边缘,以便进一步处理 我需要找到签名的X/Y坐标/矩形边界,这样我就可以只提取画布的那一部分,而不会在周围留下大量空白 我在另一个项目中注意到了这一点,我想知道如何在OpenCVSharp中实现 谢谢。编辑:正如Miki在评论中指出的,您可能正在搜索旋转框。您可能需要OpenCvSh

我需要从白色位图画布中提取一个黑白图像(签名),并将其调整到特定尺寸。图像(sig)保证在白色背景上为黑色

原因是,当我们捕获签名时,有些人写得很小,而另一些人则填充了捕获区域。但是,我需要它们全部填充另一幅图像的边缘,以便进一步处理

我需要找到签名的X/Y坐标/矩形边界,这样我就可以只提取画布的那一部分,而不会在周围留下大量空白

我在另一个项目中注意到了这一点,我想知道如何在OpenCVSharp中实现


谢谢。

编辑:正如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的函数就可以了,因为它不关心倾斜,所以位图搜索概念只需稍加调整就可以很好地工作。非常感谢他们!