csharp 使用emgu-cv创建图像的Min边界矩形。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 使用emgu-cv创建图像的Min边界矩形。相关的知识,希望对你有一定的参考价值。

using System;
using System.Drawing;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.CV.Util;

namespace MBR
{
    class Program
    {
        static void Main(string[] args)
        {
            string filePath = args[0];
            
            Mat sourceData = CvInvoke.Imread(filePath, ImreadModes.Unchanged);
            CvInvoke.Imshow("Source Image", sourceData);
            
            Mat imageData = new Mat(sourceData.Height, sourceData.Width, DepthType.Cv8U, 1);
            for (int i = 0; i < sourceData.Rows; i++)
            {
                for (int j = 0; j < sourceData.Cols; j++)
                {
                    var v = sourceData.Col(j).Row(i);
                    var pixel = v.GetData();

                    var tarV = imageData.Col(j).Row(i);
                    var tarPixel = tarV.GetData();
                    tarPixel[0] = pixel[3];

                    tarV.SetTo(tarPixel);
                }
            }
            
            CvInvoke.Imshow("Threshold Image", imageData);

            using (VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint())
            {
                Mat hierarchy = new Mat();
                CvInvoke.FindContours(imageData, contours, hierarchy, RetrType.External, ChainApproxMethod.ChainApproxNone, Point.Empty);

                Mat mbr = new Mat(filePath, ImreadModes.Unchanged);

                for (int i = 0; i < contours.Size; i++)
                {
                    var rect = CvInvoke.MinAreaRect(contours[i]);
                    var points = rect.GetVertices();
                    for (int j = 0; j <= 3; j++)
                    {
                        var start = new Point((int)Math.Round(points[j].X), (int)Math.Round(points[j].Y));
                        var end = new Point((int)Math.Round(points[(j + 1) % 4].X), (int)Math.Round(points[(j + 1) % 4].Y));
                        CvInvoke.Line(mbr, start, end, new MCvScalar(103, 0, 102), 2);
                    }
                }

                CvInvoke.Imshow("MinAreaRect", mbr);
            }

            CvInvoke.WaitKey(0);
        }
    }
}

以上是关于csharp 使用emgu-cv创建图像的Min边界矩形。的主要内容,如果未能解决你的问题,请参考以下文章

csharp 使用图像创建PDF

csharp 使用带有.net的ffmpeg从视频创建缩略图图像

csharp 创建字符串图像

csharp 以百分比min和max为单位的值

如何为 iPhone 6/7 自定义边到边图像指定尺寸?

csharp 使用FFMPEG截取屏幕截图并从视频生成图像