Thông báo

Collapse
No announcement yet.

Giải thích giùm mình hàm con này dùng Emgu CV sang OpenCV

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Giải thích giùm mình hàm con này dùng Emgu CV sang OpenCV

    Trong hàm này mình chưa hiểu hàm LineSegment2D của Emgu CV , bạn nào biết giải thích giùm mình, và cách sử dụng trong OpenCV.Nếu viết lại code c/c++ dùng openCV thì tuyệt. Cảm ơn nhiều


    private Image<Gray, Byte> Method_HSV(Image<Hsv, byte> image)
    { LineSegment2D[] Lines = // Points depend on each hue

    { new LineSegment2D ( new Point (32,243), new Point (64,255)),
    new LineSegment2D ( new Point (64,16), new Point (32,64)), };
    Vmax = 255;
    Vmin = 16;
    Smax = 64;
    Smin = 32;
    // Normalise each pixel of the image and return a new image
    for (int i = 0; i < width; i++)
    {
    for (int j = 0; j < height; j++)
    {

    Gray = GreyImg_2[j, i].Intensity;
    V = image[j, i].Value; // Checks the Brightness
    S = image[j, i].Satuation; // Decides intensity of the colour
    H = image[j, i].Hue; // Decides the Colour
    int s = (int)S;
    int v = (int)V;
    if (H > 10 && H < 135) // Check for not RED
    {
    GreyImg_2[j, i] = Black;
    }
    else
    {// Check horizontal and vertical lines
    if (Vmax < V || V < Vmin || S < Smin)
    GreyImg_2[j, i] = Black;
    else if (S > Smax)
    GreyImg_2[j, i] = White;
    else
    {// use table XI
    GreyImg_2[j, i] = White;
    for (int n = 0; n < Lines.Length; n++) // number of lines
    {
    int S1 = Lines[n].P1.X;
    int V1 = Lines[n].P1.Y;
    int S2 = Lines[n].P2.X;
    int V2 = Lines[n].P2.Y;
    if ((V2 - V1) > 0)
    {
    if ((((V2 - V1) * s) + ((S1 - S2) * v) + (V1 * S2 - S1 * V2)) < 0)
    GreyImg_2[j, i] = Black;
    }
    else
    {
    if ((((V2 - V1) * s) + ((S1 - S2) * v) + (V1 * S2 - S1 * V2)) > 0)
    GreyImg_2[j, i] = Black;
    }
    }
    }
    }
    }
    }
    return GreyImg_2;
    }

  • #2
    up .
    Last edited by levietquoc; 29-10-2013, 11:22.

    Comment


    • #3
      Bạn nghiên cứu sao. Mình đang thắc mắc là lệnh định nghĩa Lines này
      LineSegment2D[] Lines = // Points depend on each hue
      { new LineSegment2D ( new Point (32,243), new Point (64,255)),
      new LineSegment2D ( new Point (64,16), new Point (32,64)), };

      Với cái vòng for này
      for (int n = 0; n < Lines.Length; n++) // number of lines
      {
      int S1 = Lines[n].P1.X;
      int V1 = Lines[n].P1.Y;
      int S2 = Lines[n].P2.X;
      int V2 = Lines[n].P2.Y;
      }

      Bạn hiểu 2 lệnh này không giúp mình với. Thank nhiều.

      Comment


      • #4
        Mảng hai đoạn thẳng kiểu LineSegment2D, xem định nghĩa của cấu trúc này như dưới đây.
        Vòng lặp for lặp qua hai phần tử của mảng, tại mỗi phần tử của mảng nó lấy các thànhh phần tọa độ điểm thứ nhất P1(X,Y) và điểm thứ hai P2(X,Y). Chỉ đơn giản vậy thôi.

        PS: Nếu bài viết của bạn có chứa mã chương trình, hãy đặt nó vào bên trong thẻ CODE để mã nguồn được hiển thị theo cấu trúc thân thiện hơn.

        Code:
        using System;
        using System.Drawing;
        
        namespace Emgu.CV.Structure
        {
           /// <summary> 
           /// A line segment 
           /// </summary>
           public struct LineSegment2D 
           {
              ///<summary> A point on the line </summary>
              private Point _p1;
              ///<summary> An other point on the line </summary>
              private Point _p2;
        
              ///<summary> A point on the line </summary>
              public Point P1 { get { return _p1; } set { _p1 = value; } }
        
              ///<summary> An other point on the line </summary>
              public Point P2 { get { return _p2; } set { _p2 = value; } }
        
              /// <summary> 
              /// Create a line segment with the specific starting point and end point 
              /// </summary>
              /// <param name="p1">The first point on the line segment</param>
              /// <param name="p2">The second point on the line segment</param>
              public LineSegment2D(Point p1, Point p2) 
              {
                 _p1 = p1;
                 _p2 = p2;
              }
        
              ///<summary> The direction of the line, the norm of which is 1 </summary>
              public PointF Direction
              {
                 get
                 {
                    int dx = P1.X - P2.X;
                    int dy = P1.Y - P2.Y;
                    float dist = (float)Math.Sqrt(dx * dx + dy * dy);
        
                    return new PointF(dx / dist, dy / dist);
                 }
              }
        
              /// <summary>
              /// Determine which side of the line the 2D point is at
              /// </summary>
              /// <param name="point">the point</param>
              /// <returns>
              /// 1 if on the right hand side;
              /// 0 if on the line;
              /// -1 if on the left hand side;
              /// </returns>
              public int Side(Point point)
              {
                 float res = (P2.X - P1.X) * (point.Y - P1.Y) - (point.X - P1.X) * (P2.Y - P1.Y);
                 return res > 0.0f ? 1 :
                    res < 0.0f ? -1 : 0;
              }
        
              /// <summary>
              /// Get the exterior angle between this line and <paramref name="otherLine"/>
              /// </summary>
              /// <param name="otherLine">The other line</param>
              /// <returns>The exterior angle between this line and <paramref name="otherLine"/></returns>
              public double GetExteriorAngleDegree(LineSegment2D otherLine)
              {
                 PointF direction1 = Direction;
                 PointF direction2 = otherLine.Direction;
                 double radianAngle = Math.Atan2(direction2.Y, direction2.X) - Math.Atan2(direction1.Y, direction1.X);
                 double degreeAngle = radianAngle * (180.0 / Math.PI);
                 return
                     degreeAngle <= -180.0 ? degreeAngle + 360 :
                     degreeAngle > 180.0 ? degreeAngle - 360 :
                     degreeAngle;
              }
        
              /// <summary> 
              /// Get the length of the line segment 
              /// </summary>
              public double Length
              {
                 get
                 {
                    int dx = P1.X - P2.X;
                    int dy = P1.Y - P2.Y;
                    return Math.Sqrt(dx * dx + dy * dy);
                 }
              }
           }
        }
        Last edited by GMVT; 31-10-2013, 23:13. Lý do: Định dạng lại kiểu hiển thị mã nguồn
        GIALE MACHINE VISION TECHNOLOGIES
        E-mail:
        Website:

        Comment

        Về tác giả

        Collapse

        levietquoc Tìm hiểu thêm về levietquoc

        Bài viết mới nhất

        Collapse

        • mansion123
          Bật mí những điều ít ai biết về thi công gỗ óc chó
          bởi mansion123
          Thi công gỗ óc chó giúp không gian trở nên sang trọng, ấm cúng, gần gũi hơn. Sự kết hợp giữa thẩm mỹ và chất lượng cao của gỗ óc chó chắc chắn sẽ mang lại giá trị lâu dài và làm hài lòng ngay cả những khách hàng khó tính nhất. Vậy đằng
          ...
          hôm nay, 16:08
        • tuyennhan
          Trả lời cho Tiếng Anh cho người Việt
          bởi tuyennhan
          Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
          Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
          hôm nay, 07:44
        • vi van pham
          Trả lời cho Tiếng Anh cho người Việt
          bởi vi van pham
          Cám ơn những lời chúc tốt đẹp của em.

          Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

          Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
          hôm nay, 02:00
        • nhathung1101
          Trả lời cho Tiếng Anh cho người Việt
          bởi nhathung1101
          Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

          Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

          Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
          Hôm qua, 22:18
        • dinhthuong80
          Trả lời cho Tiếng Anh cho người Việt
          bởi dinhthuong80
          Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

          Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
          Hôm qua, 14:51
        • dinhthuong80
          Trả lời cho Tiếng Anh cho người Việt
          bởi dinhthuong80
          Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

          Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
          Hôm qua, 14:39
        • dinhthuong80
          Trả lời cho Tiếng Anh cho người Việt
          bởi dinhthuong80
          Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

          Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
          Hôm qua, 14:28
        • bqviet
          Trả lời cho Tiếng Anh cho người Việt
          bởi bqviet
          Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
          21-02-2025, 20:26
        • mèomướp
          Trả lời cho Tiếng Anh cho người Việt
          bởi mèomướp
          Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
          21-02-2025, 12:32
        • vi van pham
          Trả lời cho Tiếng Anh cho người Việt
          bởi vi van pham
          Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

          Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
          20-02-2025, 21:31
        Đang tải...
        X