一、效果
二、代码
// 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));