続いて、timer1を張り付けて、defaultの100msec毎に回転角を変えて、アニメーションさせてみます。
カクカクしながらもアニメーションしてくれます(100msecなのでこんなもんでしょうか)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
using OpenCvSharp.CPlusPlus;
using OpenCvSharp.Extensions;
namespace _06_affineRot
{
public partial class Form1 : Form
{
private double angle = 0.0;
private Mat procImage = new Mat(); // 縮小した表示用の画像(回転前)
public Form1()
{
InitializeComponent();
}
private void button_disp_Click(object sender, EventArgs e)
{
Mat matImage = new Mat(@"C:\Users\hoge\hogehoge.jpg");
procImage = new Mat();
// とりあえずリサイズしてみた (picuterBosのサイズにあわせています)
Cv2.Resize(matImage, procImage, new CvSize(320,240));
// 表示用bitmap変換
Image dispImage = BitmapConverter.ToBitmap(procImage);
pictureBox1.Image = dispImage;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
angle = (angle + 1.0) % 360.0;
Mat angledImage = AffineRotate(procImage, angle);
Image dispImage = BitmapConverter.ToBitmap(angledImage);
pictureBox1.Image = dispImage;
}
// affin変換で回転させてみる
private Mat AffineRotate(Mat srcImage, double angle)
{
Mat retImage = new Mat();
double scale = 1.0;
Point2f center = new Point2f(srcImage.Width / 2, srcImage.Height / 2);
Mat affineMatrix = Cv2.GetRotationMatrix2D(center, angle, scale);
Cv2.WarpAffine(srcImage, retImage, affineMatrix, srcImage.Size());
return retImage;
}
}
}
0 件のコメント:
コメントを投稿