Ответы пользователя по тегу C#
  • Как получить bitmap от ip камеры?

    @mIka01 Автор вопроса
    string url = "185.10.80.33:8082/record/current.jpg?rand=313886";
    PictureBox picbox = new PictureBox();
    picbox.Load(url);
    Bitmap bitmapRemote = (Bitmap)picbox.Image;
    Ответ написан
    Комментировать
  • Как отправить значений по SerialPort в Arduino с помощью c#?

    @mIka01 Автор вопроса
    У меня получилось так .
    Arduino.
    Serial.begin(9600);
          Serial.setTimeout(100);
        while (true) {
        if (Serial.available()) {   
        turn(Serial.parseInt(), 100, 2, 3, 4, 5, 18);
        goto g0;
        }
      }   
       g0:
       {}

    А код для c#.
    SerialPort port;
                port = new SerialPort("COM12", 9600);
    
                port.Open();            
                port.WriteLine(textBox1.Text);
                port.Close();
    Ответ написан
    Комментировать
  • Как построить stl силами c#?

    @mIka01 Автор вопроса
    Если нужно то есть библиотека.
    Скачиваете напрямую из NuGet.
    using System.IO;
    using IxMilia.Stl;
    
    StlFile stlFile = new StlFile();
                stlFile.SolidName = "my-solid";
    
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(0, 0, 0), new StlVertex(0, 100, 0), new StlVertex(100, 0, 0)));
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(100, 0, 0), new StlVertex(0, 100, 0), new StlVertex(100, 100, 0)));
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(0, 0, 100), new StlVertex(100, 0, 100), new StlVertex(0, 100, 100)));
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(100, 0, 100), new StlVertex(0, 100, 100), new StlVertex(100, 100, 100)));
    
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(0, 0, 0), new StlVertex(100, 0, 0), new StlVertex(0, 0, 100)));
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(0, 0, 100), new StlVertex(100, 0, 0), new StlVertex(100, 0, 100)));
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(0, 100, 0), new StlVertex(100, 100, 0), new StlVertex(0, 100, 100)));
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(0, 100, 100), new StlVertex(100, 100, 0), new StlVertex(100, 100, 100)));
    
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(0, 0, 0), new StlVertex(0, 100, 0), new StlVertex(0, 0, 100)));
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(0, 0, 100), new StlVertex(0, 100, 0), new StlVertex(0, 100, 100)));
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(100, 0, 0), new StlVertex(100, 100, 0), new StlVertex(100, 0, 100)));
                stlFile.Triangles.Add(new StlTriangle(new StlNormal(1, 0, 0), new StlVertex(100, 0, 100), new StlVertex(100, 100, 0), new StlVertex(100, 100, 100)));
    
                using (FileStream fs = new FileStream(@"C:\Users\...\1.stl", FileMode.Open))
                {
                    stlFile.Save(fs);
                }
    Ответ написан
  • Как запустить параллельно две функции?

    @mIka01 Автор вопроса
    Есть еще один способ. (Он у меня сработал)
    {
                int res=0, res1=0, res2=0, res3=0, res4=0;
                Thread t1 = new Thread(() => {res1 = Plus_2(2); });
                Thread t2 = new Thread(() => {res2 = Plus_2(3); });
                Thread t3 = new Thread(() => {res3 = Plus_2(4); });
                Thread t4 = new Thread(() => {res4 = Plus_2(5); });
     
                //Запускаем вычисление в четыре потока
                t1.Start(); t2.Start(); t3.Start();t4.Start();
     
                //Ожидаем завершение всех
                t1.Join(); t2.Join(); t3.Join(); t4.Join();
     
                res = res1 + res2 + res3 + res4;// Результат всех вычислений суммируем, в данном случае ответ будет 22
     
            }
     
            static int  Plus_2(int a)// метод вычисления
              { int b=2; return a + b;}

    Вот мой код.
    Ответ написан
    Комментировать
  • Как построить 3D график по точкам?

    @mIka01 Автор вопроса
    Здраствуйте.
    Один из способов решения, которым я воспользовался это:
    1. Триангулировать плоскость точек.
    2. Построить плоскость через получившиеся треугольники.


    1. Его можно посмотреть из моего прошлого вопроса.
    2. Через получившиеся треугольники можно построить плоскость. Для этого можно воспользоваться библиотекой OpenGL. Очень хорошо расписано, показано и приведен пример программы здесь (Программа в конце статьи).
    Ответ написан
    Комментировать
  • Как реализовать триангуляцию?

    @mIka01 Автор вопроса
    Здраствуйте.

    Для решения требуются создать 6 классов. (Triangulation, Vector2, Triangle, DynamicCache, Arc, Helper).

    Основная программа выглядит как то так.
    List<Vector2> Points = new List<Vector2>(); // List (эквивалент массиву), суда записываются координаты точек (далее).
    
                int[,] array = new int[,] // Сам массив с точками (координатами).
                {
                    {200, 0 },
                    {0, 200 },
                    {400, 200 },
                    {200, 400 },
                    {600, 400 },
                    {200, 500 },
                    {0, 600 },
                    {400, 600 },
                };
    
                Points.Add(new Vector2(0d, 0d)); // К сожалению для библиотеку которую нашел Woldemar89 
                Points.Add(new Vector2(1000, 0d)); // требует рамки триангуляции и они включаются в саму триангуляцию.
                Points.Add(new Vector2(1000, 1000)); // Поэтому это они и есть. <-
                Points.Add(new Vector2(0d, 1000));
    
                for (int i = 0; i < array.GetLength(0); i++) // Внесение в List Points точки из массива.
                {
                    Points.Add(new Vector2(array[i, 0], array[i, 1]));
                }
    
                Triangulation triangulation = new Triangulation(Points); // Использования самой триангуляции.
    
                for (int i = 0; i < triangulation.triangles.Count; i++) // Вывод координат получившихся треугольников.
                {
                    Console.Write(triangulation.triangles[i].points[0].x + " " + triangulation.triangles[i].points[0].y + " - "); // Треугольник 1.
                    Console.Write(triangulation.triangles[i].points[1].x + " " + triangulation.triangles[i].points[1].y + " - ");// Треугольник 2.
                    Console.WriteLine(triangulation.triangles[i].points[2].x + " " + triangulation.triangles[i].points[2].y);// Треугольник 3.
                }


    Фото вывода.
    60374b0a22307886070503.png

    Сами классы.
    (не могу опубликовать все поэтому кусками)
    class Triangulation
        {
            public List<Vector2> points = new List<Vector2>();
            public List<Triangle> triangles = new List<Triangle>();
    
            private DynamicCache Cache = null;
    
            public Triangulation(List<Vector2> _points)
            {
                points = _points;
    
                //Инициализация кэша
                Cache = new DynamicCache(points[2]);
    
                //Добавление супер структуры
                triangles.Add(new Triangle(points[0], points[1], points[2]));
                triangles.Add(new Triangle(triangles[0].arcs[2], points[3]));
    
                //Добавление ссылок в ребра на смежные треугольники супер структуры
                triangles[0].arcs[2].trAB = triangles[1];
                triangles[1].arcs[0].trBA = triangles[0];
    
                //Добавление супер структуры в кэш
                Cache.Add(triangles[0]);
                Cache.Add(triangles[1]);
    
                Triangle CurentTriangle = null;
                Triangle NewTriangle0 = null;
                Triangle NewTriangle1 = null;
                Triangle NewTriangle2 = null;
    
                Arc NewArc0 = null;
                Arc NewArc1 = null;
                Arc NewArc2 = null;
    
                Arc OldArc0 = null;
                Arc OldArc1 = null;
                Arc OldArc2 = null;
    
                for (int i = 4; i < _points.Count; i++)
                {
                    CurentTriangle = GetTriangleForPoint(_points[i]);
    
                    if (CurentTriangle != null)
                    {
                        //Создание новых ребер, которые совместно с ребрами преобразуемого треугольника образуют новые три треугольника 
                        NewArc0 = new Arc(CurentTriangle.points[0], _points[i]);
                        NewArc1 = new Arc(CurentTriangle.points[1], _points[i]);
                        NewArc2 = new Arc(CurentTriangle.points[2], _points[i]);
    
                        //Сохранение ребер преобразуемого треугольника
                        OldArc0 = CurentTriangle.GetArcBeatwen2Points(CurentTriangle.points[0], CurentTriangle.points[1]);
                        OldArc1 = CurentTriangle.GetArcBeatwen2Points(CurentTriangle.points[1], CurentTriangle.points[2]);
                        OldArc2 = CurentTriangle.GetArcBeatwen2Points(CurentTriangle.points[2], CurentTriangle.points[0]);
    
                        //Преобразование текущего треугольника в один из новых трех
                        NewTriangle0 = CurentTriangle;
                        NewTriangle0.arcs[0] = OldArc0;
                        NewTriangle0.arcs[1] = NewArc1;
                        NewTriangle0.arcs[2] = NewArc0;
                        NewTriangle0.points[2] = _points[i];
    
                        //Дополнительно создаются два треугольника
                        NewTriangle1 = new Triangle(OldArc1, NewArc2, NewArc1);
                        NewTriangle2 = new Triangle(OldArc2, NewArc0, NewArc2);
    
                        //Новым ребрам передаются ссылки на образующие их треугольники
                        NewArc0.trAB = NewTriangle0;
                        NewArc0.trBA = NewTriangle2;
                        NewArc1.trAB = NewTriangle1;
                        NewArc1.trBA = NewTriangle0;
                        NewArc2.trAB = NewTriangle2;
                        NewArc2.trBA = NewTriangle1;
    
                        //Передача ссылок на старые ребра
                        if (OldArc0.trAB == CurentTriangle)
                            OldArc0.trAB = NewTriangle0;
                        if (OldArc0.trBA == CurentTriangle)
                            OldArc0.trBA = NewTriangle0;
    
                        if (OldArc1.trAB == CurentTriangle)
                            OldArc1.trAB = NewTriangle1;
                        if (OldArc1.trBA == CurentTriangle)
                            OldArc1.trBA = NewTriangle1;
    
                        if (OldArc2.trAB == CurentTriangle)
                            OldArc2.trAB = NewTriangle2;
                        if (OldArc2.trBA == CurentTriangle)
                            OldArc2.trBA = NewTriangle2;
    
    
                        triangles.Add(NewTriangle1);
                        triangles.Add(NewTriangle2);
    
                        Cache.Add(NewTriangle0);
                        Cache.Add(NewTriangle1);
                        Cache.Add(NewTriangle2);
    
                        CheckDelaunayAndRebuild(OldArc0);
                        CheckDelaunayAndRebuild(OldArc1);
                        CheckDelaunayAndRebuild(OldArc2);
                    }
    
                }
    
                //Дополнительный проход
                for (int i = 0; i < triangles.Count; i++)
                {
                    CheckDelaunayAndRebuild(triangles[i].arcs[0]);
                    CheckDelaunayAndRebuild(triangles[i].arcs[1]);
                    CheckDelaunayAndRebuild(triangles[i].arcs[2]);
                }
            }


    P.S. Благодарю Woldemar89 и ZoAs с форума киберфорум (очень помогли).
    Ответ написан
  • Нахождение особых точек?

    @mIka01 Автор вопроса
    Помогите, вроде сделал но не точно. Требуется экспертное мнение.
    Библиотеки:
    using System;
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Media.Imaging;
    using System.Diagnostics;
    
    using System.Drawing;
    using System.Drawing.Imaging;
    
    using AForge;
    using AForge.Imaging;
    using AForge.Imaging.Filters;
    using System.Windows.Forms;


    Публичные переменные(Можно обойтись без них):
    public Bitmap img1 = new Bitmap(@"C:\(путь)\1.bmp", true);
            public Bitmap img2 = new Bitmap(@"C:\(путь)\4.bmp", true);
            public BitmapImage bi;
            public Bitmap grayImage;


    Сам код:
    Grayscale filter = new Grayscale(0.2125, 0.7154, 0.0721);
                
                img1 = filter.Apply(img1);
                img2 = filter.Apply(img2);
    
                Stopwatch st = new Stopwatch();
                st.Start();
    
                
                SusanCornersDetector scd = new SusanCornersDetector(30, 18);
                List<IntPoint> points = scd.ProcessImage(img1);
    
               
                ExhaustiveBlockMatching bm = new ExhaustiveBlockMatching(12, 36);
                
                List<BlockMatch> matches = bm.ProcessImage(img1, points, img2);
    
                Console.WriteLine(matches[0].MatchPoint.X);
                Console.WriteLine(matches[0].MatchPoint.Y);
                Console.WriteLine(matches[0].Similarity);
                Console.WriteLine(matches[0].SourcePoint.X);
                Console.WriteLine(matches[0].SourcePoint.Y);


    Если надо то полный код с связыванием точек:
    using System;
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Media.Imaging;
    using System.Diagnostics;
    
    using System.Drawing;
    using System.Drawing.Imaging;
    
    using AForge;
    using AForge.Imaging;
    using AForge.Imaging.Filters;
    using System.Windows.Forms;
    
    namespace углы
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            public Bitmap img1 = new Bitmap(@"C:\(путь)\1.bmp", true);
            public Bitmap img2 = new Bitmap(@"C:\(путь)\4.bmp", true);
            public BitmapImage bi;
            public Bitmap grayImage;
    
            private void button1_Click(object sender, EventArgs e)
            {
                float consta = (float)Convert.ToDouble(textBox1.Text);
    
                Grayscale filter = new Grayscale(0.2125, 0.7154, 0.0721);
                
                img1 = filter.Apply(img1);
                img2 = filter.Apply(img2);
    
                Stopwatch st = new Stopwatch();
                st.Start();
    
                
                SusanCornersDetector scd = new SusanCornersDetector(30, 18);
                List<IntPoint> points = scd.ProcessImage(img1);
    
               
                ExhaustiveBlockMatching bm = new ExhaustiveBlockMatching(12, 36);
                
                List<BlockMatch> matches = bm.ProcessImage(img1, points, img2);
    
                //Console.WriteLine(matches[0].MatchPoint.X);
                //Console.WriteLine(matches[0].MatchPoint.Y);
                //Console.WriteLine(matches[0].Similarity);
                //Console.WriteLine(matches[0].SourcePoint.X);
                //Console.WriteLine(matches[0].SourcePoint.Y);
    
    
                st.Stop();
                TimeSpan elapsed = st.Elapsed;
                label1.Text = "Elapsed time = " + elapsed.ToString();
    
    
                BitmapData data = img1.LockBits(
                    new System.Drawing.Rectangle(0, 0, img1.Width, img1.Height),
                    ImageLockMode.ReadWrite, img1.PixelFormat);
    
                foreach (BlockMatch match in matches)
                {
                    
                    AForge.Imaging.Drawing.FillRectangle(data,
                        new System.Drawing.Rectangle(match.SourcePoint.X - 1, match.SourcePoint.Y - 1, 3, 3),
                        System.Drawing.Color.Yellow);
                    
                    AForge.Imaging.Drawing.Line(data, match.SourcePoint, match.MatchPoint, System.Drawing.Color.Red);
    
                    //if (match.Similarity > 0.98f)
                    if (match.Similarity > consta)                
                    {
                        // process block with high similarity
                    }
                }
    
                img1.UnlockBits(data);
                pictureBox1.Image = img1;
                pictureBox2.Image = img2;
            }
        }
    }


    У меня есть смутные сомнения о неработоспособности программы или камера плохая.
    Помогите.
    Ответ написан
    Комментировать
  • Как захватить изображение с web camera?

    @mIka01 Автор вопроса
    Тупа, но я решил.
    ссылка: Вот она

    Код выглядит вот так:
    using Emgu.CV;

    Capture capture = new Capture(); //create a camera captue
    Bitmap image = capture.QueryFrame().Bitmap; //take a picture
    pictureBox1.Image = image;

    Библиотеку скачиваем с стандартным способом:
    1. Имя проекта (левая кнопка мыши).
    2. Управление пакетами NuGet..
    3. В поиске забиваем "Emgu".
    4. Устанавливаем пакет "EmguCV" (Вторая ссылка, я скачивал первую не работало).
    5. Всё.
    Ответ написан
    Комментировать