EmguCV之ImageBox和HistogramBox的使用

原创 2016年08月29日 22:39:51

EmguCV是可以说是.NET平台下的OpenCV,可以用来进行界面程序开发,提供了ImageBox,HistogramBox,MatrixBox,PanAndZoomPictureBox,这些工具箱对于为视觉应用程序开发提供了很大的便捷性。

经过测试,该产品集成的图像控件确实好用。不过在使用中,发现官方教程和示例程序只给了某些典型应用,关于imageBOX的应用很详细,但是关于histogramBox的应用却没有合适的示例,经过尝试,终于实现了C#下直方图工具盒HistogramBox的使用。

EmguCV的下载安装,系统配置,软件配置就不赘述了,网上一大堆,实践起来也很简单。

程序功能如下图所示,左边显示摄像机图像,右边显示当前图像的直方图:



程序C#代码如下所示:

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 Emgu.CV;
using Emgu.Util;


namespace WindowsFormsApplication5
{
    public partial class cameraCapture : Form
    {
        private Capture _capture;
        private bool isCaptureInProgress;
        private Mat frame = new Mat();

        public cameraCapture()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
            CvInvoke.UseOpenCL = false;
            try
            {
                _capture = new Capture();
                _capture.ImageGrabbed += frameProcess;
            }
            catch(NullReferenceException excpt)
            {
                MessageBox.Show(excpt.Message);
            }
        }

        private void frameProcess(object sender, EventArgs arg)
        {
      
            _capture.Retrieve(frame, 0);                         // 摄像机抓取图像

            imageBox_ori.Image = frame;                          // 设置图像显示控件的图像

            histogramBox_hist.ClearHistogram();                  // 直方图控件,清除直方图
            histogramBox_hist.GenerateHistograms(frame, 256);    // 直方图控件,生成当前直方图
            histogramBox_hist.Refresh();                         // 直方图控件,刷新
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (_capture != null)
            {
                if (isCaptureInProgress) // stop capture
                {
                    button_cameraCapture.Text = "start capture";
                    _capture.Pause();
                }
                else if (!isCaptureInProgress) // start capture
                {
                    button_cameraCapture.Text = "stop capture";
                    _capture.Start();
                }
                isCaptureInProgress = !isCaptureInProgress;
            }
        }
    }
}


ImageBox的HistogramBox的使用就设计到以下几行代码,如下所示:

private void frameProcess(object sender, EventArgs arg)
{
      
    _capture.Retrieve(frame, 0);                         // 摄像机抓取图像

    imageBox_ori.Image = frame;                          // 设置图像显示控件的图像

    histogramBox_hist.ClearHistogram();                  // 直方图控件,清除直方图
    histogramBox_hist.GenerateHistograms(frame, 256);    // 直方图控件,生成当前直方图
    histogramBox_hist.Refresh();                         // 直方图控件,刷新
}

也可以改变GenerateHisograms函数里的通道数来改变生成的直方图。

public void GenerateHistograms(
	IImage image,
	int numberOfBins
)
GenerateHisograms函数的第一个参数是输入的图像,第二个参数是直方图bin个数,最大256,设置再多也没意义,最多只有256,以为每个通道值在[0 255]之间。



相关文章推荐

Emgu CV 第一个实例

Emgu CV下载地址 http://sourceforge.net/projects/emgucv/files/ 找最新的下就行了,傻瓜式安装,选择目录后自动完成安装,然后提示安装VS2008和...

【Emgu】一起学EmguCV(二)Image和Matrix的使用

转载自:http://www.cnblogs.com/bomo/archive/2013/03/28/2986573.html 【Emgu】一起学EmguCV(二)Image和Matrix的...

Emgu配置 pictureBox与imageBox等

Emgu配置: C# 调用带参数EXE文件及带启动参数EXE:

EmguCV学习(二)

记录EmguCv学习时的点点滴滴吧~ 可视化界面用winform~

使用emguCV/C# opencv绘制自定义直方图

前言 自定义直方图绘制方法 求直方图的均值 实验效果图前言新手不要着急,认真学习一天是可以搞定直方图概念及内容的。 本文参考网页: http://www.dotblogs.com.tw/v6610...
  • xuehuic
  • xuehuic
  • 2015年11月12日 12:42
  • 2677

Emgucv 直方图相关,以后整理

Imagea=new Image("153_140703112619_1.jpg"); a._EqualizeHist();直方图均衡化,提高图片对比度a = new Image("153_14070...

emgu+vs2010 找不到ImageBox控件?

emgu 在VS2010 C#中的配置成功后,想要开始编程却找不到ImageBox控件,奇了怪了,上网找方法。 最后应该是这样的~ --------------------------...

示例:使用EmguCV视频截图

示例:使用EmguCV视频截图   步骤: 1、  创建一个Windows窗体应用程序,将Form1的Name属性改为“RetrievePic”,Text属性改为“视频截图RetrievePic...

用imagebox控件实现多种视频播放功能,并且帧图片可供后续处理

深夜还在打代码(而且不止一天)的我,必须来报复一下自己的智商,不然许多的怒气和无奈都难以独自承受。         作为非计算机专业的我,对代码有着极其无法言说的热情,但是这件事是我大二才发现的,p...

Emgu CV2.3里 C#人脸检测例程 显示在Imagebox

创建一个窗体程序,在窗体里加入Imagebox控件和两个button控件。 注意:此程序用到两个文件haarcascade_frontalface_default.xml和haarcascade_e...
  • caoyelu
  • caoyelu
  • 2011年12月30日 14:40
  • 5891
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EmguCV之ImageBox和HistogramBox的使用
举报原因:
原因补充:

(最多只允许输入30个字)