我在做标签工具。
目标:通过在图片上绘制多边形,您必须导出图像 从多边形内部到外部。
示例
提取
这是我在程序里画的。
但是我不知道怎么提取这个区域,我想知道怎么提取这个区域,我已经把上面图片的顶点保存在一个对象中,但是我不知道怎么通过这些顶点从图像中提取数据
所以我找到了这个https://www.codeproject.com/Articles/703519/Cropping-Particular-Region-In-Image-Using-Csharp
但这不是工作
Can't convert Bitmap to IplImage
同样的原因,我在帖子里说要用opencvsharp 4.x,但是我现在修复的程序是. netframework 3.5,所以不支持opencvsharp 4.x,怎么办?
我做了一个函数来引用答案,但是它不起作用......我想知道为什么。
void CropImage(Bitmap bitmap, Point[] points)
{
Rectangle rect = PaddingImage(points, bitmap);
TextureBrush textureBrush = new TextureBrush(bitmap);
Bitmap bmp1 = new Bitmap(rect.Width, rect.Height);
using (Graphics g = Graphics.FromImage(bmp1))
{
g.FillPolygon(textureBrush, points);
}
string ima_path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
bmp1.Save(ima_path + "\\Image.png", ImageFormat.Png);
}
提取图像
原始的
如果使用小多边形,则根本没有输出。
您会注意到这两个图像略有不同。
在我看来,切割和提取中心点的部分不一样,我不知道我的想法是否正确。
2条答案
按热度按时间new9mtju1#
您将创建一个新位图,至少与多边形的边框一样大。从此新位图创建Create a graphics对象。然后,您可以将原始图像用作a texture brush,将draw the polygon应用于此位图。请注意,您可能需要应用转换矩阵,以便从完整图像坐标转换为裁剪图像坐标。
请注意,它看起来像是放射图像。这些图像通常是16位的,因此在使用之前需要转换为8位单色或24位RGB。如果您可以访问源代码,则应在绘图代码中完成此操作。或者you can do it yourself。
d6kp6zgx2#
这对我有用