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和...
  • fioletfly
  • fioletfly
  • 2012年03月07日 15:23
  • 30269

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

创建一个窗体程序,在窗体里加入Imagebox控件和两个button控件。 注意:此程序用到两个文件haarcascade_frontalface_default.xml和haarcascade_e...
  • caoyelu
  • caoyelu
  • 2011年12月30日 14:40
  • 6074

Emgu配置 pictureBox与imageBox等

Emgu配置: C# 调用带参数EXE文件及带启动参数EXE:
  • xixi880928
  • xixi880928
  • 2014年11月25日 10:42
  • 2325

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

转载自:http://www.cnblogs.com/bomo/archive/2013/03/28/2986573.html 【Emgu】一起学EmguCV(二)Image和Matrix的...
  • chenhongwu666
  • chenhongwu666
  • 2014年12月29日 18:17
  • 11753

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

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

颜色直方图的计算、显示、处理、对比及反向投影(How to Use Histogram? Calculate, Show, Process, Compare and BackProject)

http://www.cnblogs.com/xrwang/archive/2010/02/04/HowToUseHistogram.html 作者:王先荣 前言     颜色直方图直观的显示了...
  • jiangxinyu
  • jiangxinyu
  • 2012年09月07日 22:24
  • 3823

emgu cv 图像三色的直方图

结果如图所示 using System; using System.Collections.Generic; using System.ComponentModel; using System....
  • yeyang911
  • yeyang911
  • 2013年08月29日 20:07
  • 4156

Emgucv 直方图相关,以后整理

Imagea=new Image("153_140703112619_1.jpg"); a._EqualizeHist();直方图均衡化,提高图片对比度a = new Image("153_14070...
  • qq_22033759
  • qq_22033759
  • 2015年08月25日 20:32
  • 3368

[EmguCV|C#]使用CvInvoke自己繪製色彩直方圖-直方圖(Hitsogram)系列(4)

2014-02-06 10325 0C# 檢舉文章 過年結束了,雖然還是學生所以其實還有兩個禮拜的假期,不過為了不讓自己發慌,趁著假期多利用充實自己,所以提早回到開工狀態,...
  • hanghangaidoudou
  • hanghangaidoudou
  • 2017年04月25日 19:53
  • 453

“Emgu.CV.CvInvoke”的类型初始值设定项引发异常,无法加载 DLL“cvextern”: 找不到指定的模块

先说下错误类型: 目的是想利用EMGU的ImageBox显示一张图片,代码如下所示: Image tmp = new Image(pathname); ImgBx_ViewFile.Image = t...
  • zzq060143
  • zzq060143
  • 2017年08月20日 09:30
  • 774
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EmguCV之ImageBox和HistogramBox的使用
举报原因:
原因补充:

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