四角形の中心座標の検出

Namespace: FVIL.Caliper
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
public static CFviCaliperRectangle Rectangle(
	CFviLine lineAB,
	CFviLine lineBC,
	CFviLine lineCD,
	CFviLine lineDA
)
Visual Basic
Public Shared Function Rectangle ( 
	lineAB As CFviLine,
	lineBC As CFviLine,
	lineCD As CFviLine,
	lineDA As CFviLine
) As CFviCaliperRectangle

Parameters

lineAB
Type: FVIL.Data..::..CFviLine
辺ABの直線
lineBC
Type: FVIL.Data..::..CFviLine
辺BCの直線
lineCD
Type: FVIL.Data..::..CFviLine
辺CDの直線
lineDA
Type: FVIL.Data..::..CFviLine
辺DAの直線

Return Value

Type: CFviCaliperRectangle
4つの直線が作る四角形の中心座標と長辺・短辺の長さを求めます。

■ 戻り値(CFviCaliperRectangle)の各メンバ

長辺と短辺を格納する Long1Short1 は、 四角形の辺ABと辺BCの長さを比較して長い方が Long1 に格納され、短い方は Short1 に格納されます。 また、Long2Short2 については Long1 に辺ABが入った場合には Long2 は 辺CD、 Short2 には辺DAのように辺ABと辺CD、辺BCと辺DAの向かい合う辺が対応して LongShort に格納されます。

Long1四角形の辺ABと辺BCの長さを比較して長い方
Short1四角形の辺ABと辺BCの長さを比較して短い方
Long2Long1 と向かい合う辺
Short2Short1 と向かい合う辺
Center長方形の中心座標

正常に実行できなかった場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。

エラーコード:

ErrorCode メンバ内容
51FVIL.ErrorCode.LICENSE_ERROR ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。
11FVIL.ErrorCode.INVALID_PARAMETERパラメータに誤りがあります。
29FVIL.ErrorCode.NOT_CALCULABLE計算不可能です。

Examples

C# Copy imageCopy
//    $Revision: 1.3 $

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using fvalgcli;    // FvPluginXXXX attribute requires fvalgcli

namespace User.SampleCode
{
    public partial class Caliper
    {
        /// <summary>
        /// 四角形の中心座標の検出の測定.
        /// </summary>
        /// <remarks>
        /// FVIL.Caliper.Function.Rectangle(FVIL.Data.CFviLine,FVIL.Data.CFviLine,FVIL.Data.CFviLine,FVIL.Data.CFviLine)
        /// </remarks>
        [FvPluginExecute]
        public void Rectangle_linex4()
        {
            // 1) 4つの直線の生成.
            FVIL.Data.CFviLine line1 = new FVIL.Data.CFviLine( 0.3, 1.0, -100);
            FVIL.Data.CFviLine line2 = new FVIL.Data.CFviLine(-0.5, 1.0, 10);
            FVIL.Data.CFviLine line3 = new FVIL.Data.CFviLine( 0.5, 1.0, -280);
            FVIL.Data.CFviLine line4 = new FVIL.Data.CFviLine(-0.7, 1.0, -30); 

            // 2) 計測実行.
            FVIL.Caliper.CFviCaliperRectangle rect1 = FVIL.Caliper.Function.Rectangle(line1, line2, line3, line4);

            // 確認用.
            {
                // 画像、描画表示クラス、オーバーレイのインスタンスの生成.
                FVIL.Data.CFviImage image = new FVIL.Data.CFviImage(320, 240, FVIL.ImageType.UC8, 1);
                FVIL.GDI.CFviDisplay display = new FVIL.GDI.CFviDisplay();
                FVIL.GDI.CFviOverlay overlay = new FVIL.GDI.CFviOverlay();

                {
                    // 描画図形の生成.

                    // 補助線(四角形の各辺の線分)
                    FVIL.Data.CFviLineSegment ls_bottom, ls_top, ls_right, ls_left;
                    {
                        FVIL.Data.CFviPoint cp_12 = FVIL.Caliper.Function.CrossPoint(line1, line2);
                        FVIL.Data.CFviPoint cp_14 = FVIL.Caliper.Function.CrossPoint(line1, line4);
                        FVIL.Data.CFviPoint cp_32 = FVIL.Caliper.Function.CrossPoint(line3, line2);
                        FVIL.Data.CFviPoint cp_34 = FVIL.Caliper.Function.CrossPoint(line3, line4);

                        ls_bottom = new FVIL.Data.CFviLineSegment(cp_32, cp_34);
                        ls_top = new FVIL.Data.CFviLineSegment(cp_12, cp_14);
                        ls_right = new FVIL.Data.CFviLineSegment(cp_12, cp_32);
                        ls_left = new FVIL.Data.CFviLineSegment(cp_14, cp_34);
                    }
                    System.Collections.Generic.List<FVIL.GDI.CFviGdiLineSegment> glinesegs = new List<FVIL.GDI.CFviGdiLineSegment>();
                    glinesegs.Add(new FVIL.GDI.CFviGdiLineSegment(ls_bottom));
                    glinesegs.Add(new FVIL.GDI.CFviGdiLineSegment(ls_top));
                    glinesegs.Add(new FVIL.GDI.CFviGdiLineSegment(ls_right));
                    glinesegs.Add(new FVIL.GDI.CFviGdiLineSegment(ls_left));
                    foreach (FVIL.GDI.CFviGdiLineSegment glineseg in glinesegs)
                    {
                        glineseg.Pen.Color = Color.Red;
                        glineseg.Pen.Style = FVIL.GDI.PenStyle.Solid;
                        glineseg.Pen.Width = 1;
                    }

                    // 結果点.
                    FVIL.GDI.CFviGdiPoint gcenter = new FVIL.GDI.CFviGdiPoint(rect1.Center);
                    gcenter.Pen.Color = Color.Red;
                    gcenter.Pen.Width = 4;

                    // 入力線.
                    System.Collections.Generic.List<FVIL.GDI.CFviGdiLine> glines = new List<FVIL.GDI.CFviGdiLine>();
                    glines.Add(new FVIL.GDI.CFviGdiLine(line1));
                    glines.Add(new FVIL.GDI.CFviGdiLine(line2));
                    glines.Add(new FVIL.GDI.CFviGdiLine(line3));
                    glines.Add(new FVIL.GDI.CFviGdiLine(line4));
                    foreach (FVIL.GDI.CFviGdiLine gline in glines)
                    {
                        gline.Pen.Color = Color.Green;
                        gline.Pen.Style = FVIL.GDI.PenStyle.Dot;
                        gline.Pen.Width = 1;
                    }

                    // 描画図形の追加.
                    overlay.Figures.Add(gcenter);

                    foreach (FVIL.GDI.CFviGdiLineSegment glineseg in glinesegs)
                    {
                        overlay.Figures.Add(glineseg);
                    }
                    foreach (FVIL.GDI.CFviGdiLine gline in glines)
                    {
                        overlay.Figures.Add(gline);
                    }

                    overlay.Enable = true;

                }

                // 画像表示クラスへの追加.
                display.Overlays.Add(overlay);
                display.Image = image;
                display.DisplayRect = image.Window;

                // 描画イメージの保存.
                FVIL.Data.CFviImage dstimage = new FVIL.Data.CFviImage();
                display.SaveImage(dstimage);
                FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Caliper.Rectangle_linex4.png", dstimage);
            }
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports fvalgcli
' FvPluginXXXX attribute requires fvalgcli
Namespace SampleCode
    Public Partial Class Caliper
        ''' <summary>
        ''' 四角形の中心座標の検出の測定.
        ''' </summary>
        ''' <remarks>
        ''' FVIL.Caliper.Function.Rectangle(FVIL.Data.CFviLine,FVIL.Data.CFviLine,FVIL.Data.CFviLine,FVIL.Data.CFviLine)
        ''' </remarks>
        <FvPluginExecute> _
        Public Sub Rectangle_linex4()
            ' 1) 4つの直線の生成.
            Dim line1 As New FVIL.Data.CFviLine(0.3, 1.0, -100)
            Dim line2 As New FVIL.Data.CFviLine(-0.5, 1.0, 10)
            Dim line3 As New FVIL.Data.CFviLine(0.5, 1.0, -280)
            Dim line4 As New FVIL.Data.CFviLine(-0.7, 1.0, -30)

            ' 2) 計測実行.
            Dim rect1 As FVIL.Caliper.CFviCaliperRectangle = FVIL.Caliper.[Function].Rectangle(line1, line2, line3, line4)

            ' 確認用.
            If True Then
                ' 画像、描画表示クラス、オーバーレイのインスタンスの生成.
                Dim image As New FVIL.Data.CFviImage(320, 240, FVIL.ImageType.UC8, 1)
                Dim display As New FVIL.GDI.CFviDisplay()
                Dim overlay As New FVIL.GDI.CFviOverlay()

                If True Then
                    ' 描画図形の生成.

                    ' 補助線(四角形の各辺の線分)
                    Dim ls_bottom As FVIL.Data.CFviLineSegment, ls_top As FVIL.Data.CFviLineSegment, ls_right As FVIL.Data.CFviLineSegment, ls_left As FVIL.Data.CFviLineSegment
                    If True Then
                        Dim cp_12 As FVIL.Data.CFviPoint = FVIL.Caliper.[Function].CrossPoint(line1, line2)
                        Dim cp_14 As FVIL.Data.CFviPoint = FVIL.Caliper.[Function].CrossPoint(line1, line4)
                        Dim cp_32 As FVIL.Data.CFviPoint = FVIL.Caliper.[Function].CrossPoint(line3, line2)
                        Dim cp_34 As FVIL.Data.CFviPoint = FVIL.Caliper.[Function].CrossPoint(line3, line4)

                        ls_bottom = New FVIL.Data.CFviLineSegment(cp_32, cp_34)
                        ls_top = New FVIL.Data.CFviLineSegment(cp_12, cp_14)
                        ls_right = New FVIL.Data.CFviLineSegment(cp_12, cp_32)
                        ls_left = New FVIL.Data.CFviLineSegment(cp_14, cp_34)
                    End If
                    Dim glinesegs As System.Collections.Generic.List(Of FVIL.GDI.CFviGdiLineSegment) = New List(Of FVIL.GDI.CFviGdiLineSegment)()
                    glinesegs.Add(New FVIL.GDI.CFviGdiLineSegment(ls_bottom))
                    glinesegs.Add(New FVIL.GDI.CFviGdiLineSegment(ls_top))
                    glinesegs.Add(New FVIL.GDI.CFviGdiLineSegment(ls_right))
                    glinesegs.Add(New FVIL.GDI.CFviGdiLineSegment(ls_left))
                    For Each glineseg As FVIL.GDI.CFviGdiLineSegment In glinesegs
                        glineseg.Pen.Color = Color.Red
                        glineseg.Pen.Style = FVIL.GDI.PenStyle.Solid
                        glineseg.Pen.Width = 1
                    Next

                    ' 結果点.
                    Dim gcenter As New FVIL.GDI.CFviGdiPoint(rect1.Center)
                    gcenter.Pen.Color = Color.Red
                    gcenter.Pen.Width = 4

                    ' 入力線.
                    Dim glines As System.Collections.Generic.List(Of FVIL.GDI.CFviGdiLine) = New List(Of FVIL.GDI.CFviGdiLine)()
                    glines.Add(New FVIL.GDI.CFviGdiLine(line1))
                    glines.Add(New FVIL.GDI.CFviGdiLine(line2))
                    glines.Add(New FVIL.GDI.CFviGdiLine(line3))
                    glines.Add(New FVIL.GDI.CFviGdiLine(line4))
                    For Each gline As FVIL.GDI.CFviGdiLine In glines
                        gline.Pen.Color = Color.Green
                        gline.Pen.Style = FVIL.GDI.PenStyle.Dot
                        gline.Pen.Width = 1
                    Next

                    ' 描画図形の追加.
                    overlay.Figures.Add(gcenter)

                    For Each glineseg As FVIL.GDI.CFviGdiLineSegment In glinesegs
                        overlay.Figures.Add(glineseg)
                    Next
                    For Each gline As FVIL.GDI.CFviGdiLine In glines
                        overlay.Figures.Add(gline)
                    Next

                    overlay.Enable = True

                End If

                ' 画像表示クラスへの追加.
                display.Overlays.Add(overlay)
                display.Image = image
                display.DisplayRect = image.Window

                ' 描画イメージの保存.
                Dim dstimage As New FVIL.Data.CFviImage()
                display.SaveImage(dstimage)
                FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Caliper.Rectangle_linex4.png", dstimage)
            End If
        End Sub
    End Class
End Namespace

Exceptions

ExceptionCondition
FVIL..::..CFviExceptionこの例外の原因については、上記のエラーコード表をご参照ください。

See Also