将Point2f[]转换为Mat[]OpenCV

将Point2f[]转换为Mat[]OpenCV,opencv,opencvsharp,Opencv,Opencvsharp,我试图使用OpenCvSharp库将Point2f[]转换为Mat[],但不知道从何处开始。我们将非常感谢您的帮助 rect = cv2.minAreaRect(c) box = np.int0(cv2.cv.BoxPoints(rect)) 这是我试图翻译成OpenCvSharp的代码 这是我第一次使用OpenCvSharp,因此我可以在链接页面中完成除包含的行之外的所有操作。我认为这是您正在寻找的IEnumerable重载,而不是基于Mat的重载 我可以通过Selecting作为Poin

我试图使用OpenCvSharp库将Point2f[]转换为Mat[],但不知道从何处开始。我们将非常感谢您的帮助

rect = cv2.minAreaRect(c)
box = np.int0(cv2.cv.BoxPoints(rect))
这是我试图翻译成OpenCvSharp的代码


这是我第一次使用OpenCvSharp,因此我可以在链接页面中完成除包含的行之外的所有操作。

我认为这是您正在寻找的
IEnumerable
重载,而不是基于
Mat
的重载

我可以通过
Select
ing作为
Point.Point
并包装在一个虚拟数组中来实现。下面是使用链接中的示例图像的完整代码:

// Using NuGet package OpenCvSharp-AnyCPU 2.4.10.20140320. 
var image = Cv2.ImRead("barcode_01.jpg");
var gray = image.CvtColor(OpenCvSharp.ColorConversion.BgraToGray);
var gradX = gray.Sobel(MatType.CV_32F, 1, 0, -1);
var gradY = gray.Sobel(MatType.CV_32F, 0, 1, -1);
var gradient = gray.EmptyClone();
Cv2.Subtract(gradX, gradY, gradient);
Cv2.ConvertScaleAbs(gradient, gradient);         
var kernel = Cv2.GetStructuringElement(StructuringElementShape.Rect, new Size(21, 7));
var closed = (gradient.Blur(new Size(9,9)).Threshold(225, 255, OpenCvSharp.ThresholdType.Binary)).MorphologyEx(OpenCvSharp.MorphologyOperation.Close, kernel);            
Mat[] contours;
var hierarchy = InputOutputArray.Create(new List<Vec4i>());            
closed.Erode(kernel, null, 4).Dilate(kernel, null, 4).FindContours(out contours, hierarchy, OpenCvSharp.ContourRetrieval.External, OpenCvSharp.ContourChain.ApproxSimple);            
var c = contours.ToList().OrderByDescending(mat => mat.ContourArea(false)).FirstOrDefault();
if (c != null)
{
    var rect = Cv2.MinAreaRect(c);
    var box = new[] { rect.Points().Select(p2f => new Point(p2f.X, p2f.Y)) };
    Cv2.DrawContours(image, box, -1, new Scalar(0, 255, 0), 3);
    image.SaveImage(@"out.png");
}
//使用NuGet软件包OpenCVAnyCPU 2.4.10.20140320。
var image=Cv2.ImRead(“条形码_01.jpg”);
var gray=image.cvt颜色(OpenCvSharp.ColorConversion.BgraToGray);
var gradX=灰色Sobel(MatType.CV_32F,1,0,-1);
var gradY=gray.Sobel(MatType.CV_32F,0,1,-1);
var梯度=灰色。空旋风分离器();
Cv2.减法(梯度x,梯度y,梯度);
Cv2.可转换标度(梯度,梯度);
var kernel=Cv2.GetStructuringElement(StructuringElementShape.Rect,新大小(21,7));
var closed=(gradient.Blur(新大小(9,9)).Threshold(225255,OpenCvSharp.ThresholdType.Binary)).MorphologyEx(OpenCvSharp.morphologyooperation.Close,kernel);
垫[]等高线;
var hierarchy=InputOutputArray.Create(new List());
closed.腐蚀(kernel,null,4)、扩张(kernel,null,4)、FindContours(out轮廓,hierarchy,OpenCvSharp.ContourRetrieval.External,OpenCvSharp.ContourChain.ApproxSimple);
var c=contours.ToList().OrderByDescending(mat=>mat.ContourArea(false)).FirstOrDefault();
如果(c!=null)
{
var rect=Cv2.minareact(c);
var box=new[]{rect.Points().Select(p2f=>newpoint(p2f.X,p2f.Y));
Cv2.绘制轮廓(图像,框,-1,新标量(0,255,0),3);
image.SaveImage(@“out.png”);
}

你的目标是什么?Point2f是一个二维浮点坐标,Mat代表一个光栅。我试图用python将这段代码翻译成openCvSharp,其中c是Mat rect=cv2.minarealect(c)box=np.int0(cv2.cv.BoxPoints(rect)),你能想出一段代码吗?这应该能帮我弄清楚从哪里开始。问题是点和垫是不同的对象。一个是特定位置,另一个是栅格对象。我见过积分存储奇怪的东西,所以我对想法持开放态度。