图像处理(旋转)_基于EMGUCV(一)
2018-01-19 16:16
603 查看
EMGUCV操作图像处理已经封装的很好,但应付日常操作还是略有不怠,比如这次工作中遇到的透明和旋转操作。
EMGUCV作为OPENCV的C#变种,理论上后者能实现的功能,EMGUCV中应该都能实现,但大多数人往往由于数据类型的问题会卡住,本文就是这么一个例子。
OPENCV下的图像旋转可以参考以下博文,
http://blog.csdn.net/garfielder007/article/details/50487654
本文仅对上文中的代码翻译为C#版本
最终效果图如下:
初开博客,目的是交流与合作,本人QQ:273651820。
EMGUCV作为OPENCV的C#变种,理论上后者能实现的功能,EMGUCV中应该都能实现,但大多数人往往由于数据类型的问题会卡住,本文就是这么一个例子。
OPENCV下的图像旋转可以参考以下博文,
http://blog.csdn.net/garfielder007/article/details/50487654
本文仅对上文中的代码翻译为C#版本
//旋转图像内容不变,尺寸相应变大 Image<Bgra, byte> rotateImage1(Image modelImage, int degree) { Image<Bgra, byte> modelImage_Emgucv = new Image<Bgra, byte>(new Bitmap(modelImage)); double angle = degree * Math.PI / 180; // 弧度 double a = Math.Sin(angle), b = Math.Cos(angle); int width = modelImage.Width; int height = modelImage.Height; int width_rotate = Convert.ToInt32(height * Math.Abs(a) + width * Math.Abs(b)); int height_rotate = Convert.ToInt32(width * Math.Abs(a) + height * Math.Abs(b)); //旋转数组map // [ m0 m1 m2 ] ===> [ A11 A12 b1 ] // [ m3 m4 m5 ] ===> [ A21 A22 b2 ] //float[] map = new float[6]; //此处为修改点,opencv可以直接使用数组,但emgucv似乎不认,所以改为了Matrix。 Matrix<float> map_matrix_temp = new Matrix<float>(2, 3); // 旋转中心 PointF center = new PointF(width / 2, height / 2); CvInvoke.GetRotationMatrix2D(center, degree, 1.0, map_matrix_temp); map_matrix_temp[0, 2] += (width_rotate - width)/2 ; map_matrix_temp[1, 2] += (height_rotate - height) /2; Image<Bgra, byte> img_rotate = new Image<Bgra, byte>(width_rotate, height_rotate,new Bgra(0d,0d,0d,0d)); //对图像做仿射变换 //CV_WARP_FILL_OUTLIERS - 填充所有输出图像的象素。 //如果部分象素落在输入图像的边界外,那么它们的值设定为 fillval. //CV_WARP_INVERSE_MAP - 指定 map_matrix 是输出图像到输入图像的反变换, CvInvoke.WarpAffine(modelImage_Emgucv, img_rotate, map_matrix_temp, new Size(width_rotate, height_rotate),Inter.Nearest,Warp.Default,BorderType.Transparent,new MCvScalar(0d,0d,0d,0d)); return img_rotate; }
最终效果图如下:
初开博客,目的是交流与合作,本人QQ:273651820。
相关文章推荐
- C#下PICTRUEBOX拖动残影,双缓存无效!——接( 图像处理(旋转)_基于EMGUCV(一))
- 图像处理 基于Visual C++编程 学习笔记 (4)图像旋转
- 【图像处理】基于OpenCV底层实现的图片旋转
- 基于C++图像处理-任意角度的高质量的快速的图像旋转
- C#中基于GDI+(Graphics)图像处理系列之文字或者图片水印(透明、任意角度旋转)
- C#中基于GDI+(Graphics)图像处理系列之任意角度旋转图像
- 【OpenCV图像处理入门学习教程三】基于SIFT特征和SURF特征的微旋转图像拼接与融合生成全景图像的比较
- 【图像处理】基于OpenCV底层实现的图片旋转
- 基于数学形态学的图像处理
- 基于直方图均衡化的激光水下图像处理
- 图像处理------基于Otsu阈值二值化
- 数字图像处理:第十一章基于特征向量的变换
- C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
- 数字图像处理--通过矩阵,简化操作(旋转,平移,缩放,切边....)
- 区域医疗移动医疗影像解决方案--基于HTML5的PACS--HTML5图像处理【转】
- 爬山法处理基于颜色的图像分割
- 偏微分方程图像处理——基于热方程的图像去噪
- 基于Opencv图像处理的时时头像採集试验
- 初识matlab及图像处理之图片平移、旋转、水平镜像、垂直镜像、放大、缩小 (1)
- 基于主成分的图像处理