EMGU.CV入门(五、图片变换)

22 篇文章 29 订阅

一、效果

在这里插入图片描述

二、代码

在这里插入图片描述
在这里插入图片描述

    // 1. 加载原图1
     var image1 = new Image<Bgr, byte>("bird1.png");
     PreviewImage1 = new WriteableBitmap(Bitmap2BitmapImage(image1.Bitmap));

     // 2. 图像放大
     var image2 = new Image<Bgr, byte>(image1.Width * 2, image1.Height * 2);
     CvInvoke.Resize(image1,image2,image2.Size);
     PreviewImage2 = new WriteableBitmap(Bitmap2BitmapImage(image2.Bitmap));

     // 3. 图像缩小
     var image3 = new Image<Bgr, byte>(image1.Width/10,image1.Height/10);
     CvInvoke.Resize(image1, image3, image3.Size,0.1,0.1);
     PreviewImage3 = new WriteableBitmap(Bitmap2BitmapImage(image3.Bitmap));

     // 4. 图像平移
     var image4 = new Image<Bgr, byte>(image1.Size);
     int dstRows = image1.Rows;
     int dstCols = image1.Cols;
     int offsetX = 50;
     int offsetY = 50;
     for (int i = 0; i < image1.Rows; i++) {
         for (int j = 0; j < image1.Cols; j++) {
             int x = j + offsetX;
             int y = i + offsetY;
             if (x >= 0 && x < dstCols && y >= 0 && y < dstRows){
                 image4[y, x] = image1[i, j];
             }
         }
     }
     PreviewImage4 = new WriteableBitmap(Bitmap2BitmapImage(image4.Bitmap));

     // 5. 图像旋转 //也可以使用 rotate
     var image5 = new Image<Bgr, byte>(image1.Size);
     PointF center = new PointF(image1.Cols/2,image1.Rows/2);
     double angle = 45;
     double scale = 0.5;
     // 5.1 得到旋转矩阵
     var rotateMat = new Mat();
     CvInvoke.GetRotationMatrix2D(center,angle,scale, rotateMat);
     // 5.2 进行仿射变换
     CvInvoke.WarpAffine(image1,image5, rotateMat, new Size(image1.Cols,image1.Rows));
     PreviewImage5 = new WriteableBitmap(Bitmap2BitmapImage(image5.Bitmap));

     // 6. 水平翻转
     var image6 = new Image<Bgr, byte>(image1.Size);
     CvInvoke.Flip(image1, image6, FlipType.Horizontal);
     PreviewImage6 = new WriteableBitmap(Bitmap2BitmapImage(image6.Bitmap));

     // 7. 图像转置
     var image7 = new Image<Bgr, byte>(image1.Rows, image1.Cols);
     CvInvoke.Transpose(image1, image7);
     PreviewImage7 = new WriteableBitmap(Bitmap2BitmapImage(image7.Bitmap));

     // 8. 图像重映射
     Image<Gray, Single> xMatImg = new Image<Gray, Single>(image1.Cols, image1.Rows);
     Image<Gray, Single> yMatImg = new Image<Gray, Single>(image1.Cols, image1.Rows);
     for (int i = 0; i < image1.Rows; i++)
     {
         for (int j = 0; j < image1.Cols; j++)
         {
             xMatImg[i, j] = new Gray(j);
             yMatImg[i, j] = new Gray(i + 10 * Math.Sin(j / 10.0));
         }
     }

     var image8 = new Image<Bgr, byte>(image1.Size);
     CvInvoke.Remap(image1, image8, xMatImg, yMatImg, Inter.Area);
     PreviewImage8 = new WriteableBitmap(Bitmap2BitmapImage(image8.Bitmap));

     // 9. 垂直翻转
     var image9 = new Image<Bgr, byte>(image1.Size);
     CvInvoke.Flip(image1, image9, FlipType.Vertical);
     PreviewImage9 = new WriteableBitmap(Bitmap2BitmapImage(image9.Bitmap));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值