注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

飞天心宏的博客

依稀旧梦似曾见,相逢只恨缘太迟

 
 
 

日志

 
 
关于我

出身数学,爱好文学,从事软件开发工作。一个阳光、幽默、热爱生活的男孩子,在追求理想的路上风雨无阻,勇往直前,崇尚“梦想有多远,我们就走多远”!

网易考拉推荐

EmguCV图片灰度化  

2012-04-12 19:29:35|  分类: OpenCV/EmguCV |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

示例:使用EmguCV对彩色图片进行灰度化

 

步骤:

1、  创建一个Windows窗体应用程序,将Form1Text属性改为“灰度图像ToGrayImage”,Name属性改为“ToGrayImage

2、  给窗体添加一个按钮,Name属性改为“sltImageBtn”,Text属性改为“选择图片...

3、  给窗体添加一个OpenFileDialog,用来选择图片文件,将Filter属性设置为“Image File|*.jpg;*.png;*.bmp;*.gif;

4、  给窗体添加二个PictureBox,并将SizeModel设置为Zoom

5、  布局显示效果如下:

EmguCV图片灰度化 - 飞天心宏 - 飞天心宏的博客

 

6、  双击按钮,系统会自动生成click空事件

7、  添加EmguCV的引用,这里添加最常用的3个【Emgu.CV.dllEmgu.CV.UI.dllEmgu.Util.dll

8、  添加命名空间

using Emgu.CV;

using Emgu.CV.CvEnum;

using Emgu.CV.Structure;

using System.Runtime.InteropServices;

9、  编写代码

/// <summary>

        ///选择图片事件,将彩色图片转换为灰度图像

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void sltImageBtn_Click(object sender, EventArgs e)

        {

            if (openFileDialog1.ShowDialog() == DialogResult.OK)

            {

                IntPtr ptrImage = CvInvoke.cvLoadImage(openFileDialog1.FileName, LOAD_IMAGE_TYPE.CV_LOAD_IMAGE_UNCHANGED);

                /* IplImage* 转换为Bitmap */

                pictureBox1.Image = ConvertIntPrToBitmap(ptrImage);

               

                //显示灰度图像

                IntPtr grayImage = CvInvoke.cvCreateImage(CvInvoke.cvGetSize(ptrImage), IPL_DEPTH.IPL_DEPTH_8U, 1);

                CvInvoke.cvCvtColor(ptrImage, grayImage, COLOR_CONVERSION.CV_BGR2GRAY);

              

                //pictureBox2.Image = ConvertIntPrToBitmap(grayImage); //用该方法灰度图像会有三个图片

                MIplImage mi = (MIplImage)Marshal.PtrToStructure(grayImage, typeof(MIplImage));

                Image<Gray, Byte> image = new Image<Gray, Byte>(mi.width, mi.height, mi.widthStep, mi.imageData);

                pictureBox2.Image = image.ToBitmap();

 

                CvInvoke.cvReleaseImage(ref ptrImage);

                CvInvoke.cvReleaseImage(ref grayImage);

            }

        }

 

        /// <summary>

        /// IplImage*转换为Bitmap(注:在OpenCVIplImage* 对应EmguCVIntPtr类型)       

/// </summary>

        /// <param name="ptrImage"></param>

        /// <returns>Bitmap对象</returns>

        public static Bitmap ConvertIntPrToBitmap(IntPtr ptrImage)

        {

            //IplImage指针转换成MIplImage结构

            MIplImage mi = (MIplImage)Marshal.PtrToStructure(ptrImage, typeof(MIplImage));

            Image<Bgr, Byte> image = new Image<Bgr, Byte>(mi.width, mi.height, mi.widthStep, mi.imageData);

            return image.ToBitmap();

        }

 

运行效果:

 

EmguCV图片灰度化 - 飞天心宏 - 飞天心宏的博客

  

                          

     飞天心宏  2012-04-12

  评论这张
 
阅读(5710)| 评论(3)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018