LEADTOOLS ナレッジベース

台形補正ができますか?

PerspectiveDeskewCommandクラスにより自動台形補正が可能です。
 
サンプルコード(VB.NET)
Dim command As New Leadtools.ImageProcessing.Core.PerspectiveDeskewCommand()
command.Run(Image)
 
サンプルコード(C#)
Leadtools.ImageProcessing.Core.PerspectiveDeskewCommand command = new Leadtools.ImageProcessing.Core.PerspectiveDeskewCommand();
command.Run(Image);
 
実際の動作は.NETコントロール チュートリアルの「PerspectiveDeskewCommand」をご覧ください。 
 
 
また、ManualPerspectiveDeskewCommandクラスにより手動でポイントを指定して台形補正することが可能です。
この変形は、ManualPerspectiveDeskewCommandクラスのメンバであるOutputImageプロパティに対して反映されます。サンプルコードはManualPerspectiveDeskewCommandクラスに記載の内容を参照ください。
 
 
CombineWarpCommandクラスもしくは、PerspectiveCommandクラスでは遠近法変形(任意の4点を設定することで不等辺四角形へ変形)を行うことにより台形に変形することができます。

■CombineWarpCommandクラス
サンプルコード(VB.NET)
Dim codecs As New RasterCodecs
' 背景用ビットマップを作成
Dim parentImage As RasterImage = New RasterImage(RasterMemoryFlags.Conventional, 256, 256, 24, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft, Nothing, Nothing, Nothing)
 
' 背景用のビットマップを白で塗りつぶします。
Dim command1 As Leadtools.ImageProcessing.FillCommand = New Leadtools.ImageProcessing.FillCommand
command1.Color = New Leadtools.RasterColor(255, 255, 255)
command1.Run(parentImage)
 
' 台形に変形用の画像をロードします。(白画像上に合成する)
Dim childImage As RasterImage = codecs.Load("test.jpg")
 
' 両者を合成します。
Dim command As New Leadtools.ImageProcessing.CombineWarpCommand()
Dim destPoints As LeadPoint() = {New LeadPoint(55, 30), New LeadPoint(205, 50), New LeadPoint(240, 210), New LeadPoint(20, 235)}
command.DestinationImage = parentImage
command.SetDestinationPoints(destPoints)
command.SourceRectangle = New LeadRect(0, 0, childImage.Width, childImage.Height)
command.Flags = Leadtools.ImageProcessing.CombineWarpCommandFlags.Bilinear
command.Run(childImage)
 
' 画像を保存します。
codecs.Save(parentImage, "output.jpg", RasterImageFormat.Jpeg, 24)
 
サンプルコード(C#)
RasterCodecs codecs = new RasterCodecs();
// 背景用ビットマップを作成
RasterImage parentImage = new RasterImage(RasterMemoryFlags.Conventional, 256, 256, 24, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft, null, IntPtr.Zero, 0);
 
// 背景用のビットマップを白で塗りつぶします。
Leadtools.ImageProcessing.FillCommand command1 = new Leadtools.ImageProcessing.FillCommand();
command1.Color = new Leadtools.RasterColor(255, 255, 255);
command1.Run(parentImage);
 
// 台形に変形用の画像をロードします。(白画像上に合成する)
RasterImage childImage = codecs.Load("test.jpg");
 
// 両者を合成します。
Leadtools.ImageProcessing.CombineWarpCommand command = new Leadtools.ImageProcessing.CombineWarpCommand();
LeadPoint[] destPoints = { new LeadPoint(55, 30), new LeadPoint(205, 50), new LeadPoint(240, 210), new LeadPoint(20, 235) };
command.DestinationImage = parentImage;
command.SetDestinationPoints(destPoints);
command.SourceRectangle = new LeadRect(0, 0, childImage.Width, childImage.Height);
command.Flags = Leadtools.ImageProcessing.CombineWarpCommandFlags.Bilinear;
command.Run(childImage);
 
// 画像を保存します。
codecs.Save(parentImage, "output.jpg", RasterImageFormat.Jpeg, 24);

■PerspectiveCommandクラス
サンプルコード(VB.NET)
Dim codecs As New RasterCodecs
Dim leadImage As RasterImage = Codecs.Load("test.jpg")
 
' コマンドを準備します。
Dim cornerPoints() As LeadPoint
ReDim cornerPoints(3)
cornerPoints(0).X = CInt(leadImage.Width * 3 / 9)
cornerPoints(0).Y = CInt(leadImage.Height * 1 / 12)
cornerPoints(1).X = CInt(leadImage.Width * 3 / 4)
cornerPoints(1).Y = CInt(leadImage.Height * 2 / 12)
cornerPoints(2).X = CInt(leadImage.Width * 2 / 10)
cornerPoints(2).Y = CInt(leadImage.Height * 8 / 10)
cornerPoints(3).X = CInt(leadImage.Width * 10 / 11)
cornerPoints(3).Y = CInt(leadImage.Height * 7 / 10)
Dim command As New Leadtools.ImageProcessing.SpecialEffects.PerspectiveCommand
command.CornerPoints = cornerPoints
command.FillColor = New RasterColor(255, 255, 255)
command.Type = Leadtools.ImageProcessing.SpecialEffects.PerspectiveCommandType.Color
command.Run(leadImage)
 
' 画像を保存します。
codecs.Save(leadImage, "output.jpg", RasterImageFormat.Jpeg, 24)
 
サンプルコード(C#)
RasterCodecs codecs = new RasterCodecs();
RasterImage leadImage = codecs.Load("test.jpg");
 
// コマンドを準備します。
LeadPoint[] cornerPoints = new LeadPoint[4];
cornerPoints[0].X = leadImage.Width * 3 / 9;
cornerPoints[0].Y = leadImage.Height * 1 / 12;
cornerPoints[1].X = leadImage.Width * 3 / 4;
cornerPoints[1].Y = leadImage.Height * 2 / 12;
cornerPoints[2].X = leadImage.Width * 2 / 10;
cornerPoints[2].Y = leadImage.Height * 8 / 10;
cornerPoints[3].X = leadImage.Width * 10 / 11;
cornerPoints[3].Y = leadImage.Height * 7 / 10;
Leadtools.ImageProcessing.SpecialEffects.PerspectiveCommand command = new Leadtools.ImageProcessing.SpecialEffects.PerspectiveCommand();
command.CornerPoints = cornerPoints;
command.FillColor = new RasterColor(255, 255, 255);
command.Type = Leadtools.ImageProcessing.SpecialEffects.PerspectiveCommandType.Color;
command.Run(leadImage);
 
// 画像を保存します。
codecs.Save(leadImage, "output.jpg", RasterImageFormat.Jpeg, 24);

0 コメント

記事コメントは受け付けていません。