[转载+原创]Emgu CV on C# (一) —— Emgu CV on Visual C# 2010

2014-08-16

最近要进行图像识别,准备利用几天的时间研究一下Emgu CV,花了一晚上功夫进行调试环境安装,期间遇到了不少问题,现梳理一下安装过程和调试过程中出现的问题。

中间有转载别人的部分,有简体和繁体,还掺杂英文,就不整理了,基本都能看懂。

一、环境建立准备

本篇著在於使用Visual C# 2010 Express + EmguCV環境的建置。

環境:

Visual C# 2010 Express 下載點:
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-csharp-express

EmguCV 下載點:

文件名是2.9版本,但个人感觉是2.4.9版本。

libemgucv-windows-universal-cuda-2.9.0.1922-beta.exe (214.0 MB)

2.4.0版本下载地址

thunder://QUFodHRwOi8vaXdlYi5kbC5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9lbWd1Y3YvZW1ndWN2LzIuNC4wL2xpYmVtZ3Vjdi13aW5kb3dzLXg4Ni0yLjQuMC4xNzE3LmV4ZVpa/

截至2014年8月16日,emgucv的版本为2.9.0.1922-beta。2.4.2及之前版本,若安装文件文件名中带gpu字样的,则仅限支持CUDA的显卡使用;不带gpu字样的,则通用。而通用版目前的最高版本为2.4.0。

OpenCV下載點:

截至2014年8月16日,OpenCV的稳定版本为opencv-2.4.9.exe (365.7 MB)

鉴于目前调试功能不是很复杂,根据部分网友反馈和调试经验,即使不安装opencv,emgucv也能正常运行。但据反馈,如果两个版本不匹配,会出现错误,如果要装opencv,最好保证两个软件版本一致。

二、安装调试环境

opencv安装

为了便于管理,我在C盘根目录下新建了文件夹,然后解压至下面。

EmguCV:

过程类似。我安装在C盘下面,以便统一管理。

三、参数配置(转载)

转载部分是以2.3.0版为基础,但和2.4.0配置方式一样,供参考。

Emgucv完整路徑是C:\Emgu\emgucv-windows-x86 2.3.0.1416\bin
OpenCV完整路徑是C:\opencv\opencv\build\x86\vc10\bin

因此要將這兩個路徑加進Windows環境變數裡。实际只添加了opencv环境变量。

環境變數的設定方法與設定Java的方法一樣,將
C:\Emgu\emgucv-windows-x86 2.3.0.1416\bin;C:\opencv\opencv\build\x86\vc10\bin;
填入Variable value欄位內的最前面。要注意到路徑中間及最後面需要加上“;”,如果漏加了,评论就是一长串的问题,然后我也不知道你的问题在哪里。

到目前已經算是把軟體都安裝好,也設定完成了。

四、调试环境配置

將Emgu.CV.UI.dll加入工具箱內

工具>選擇工具箱項目>.NetFrameworkm元件頁籤點內選瀏覽>

Emgu.CV.UI.dll的路徑在C:\Emgu\emgucv-windows-x86 2.3.0.1416\bin

加入工具箱以後,我們可以確認一下有沒有成功加入成功。

若成功加入工具箱則會在工具箱內自動新增四個元件

最後在加入開發程式時所需的dll函式庫,就可以開始编程。

包括Emgu.CV.dll、Emgu.CV.ML.dll、Emgu.CV.UI.dll、Emgu.Util.dll、ZedGraph.dll等文件。

相關的dll檔一樣在C:\Emgu\emgucv-windows-x86 2.3.0.1416\bin底下

至於需要加那些dll,則看需求。

到目前為止,從環境的建置一直到建立專案完整的步驟都如上面所述。

五、调试测试

是否能正常运行,用下面的例子可以测试一下,如果正常,可以弹出窗口显示一张图片。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.Util;

namespace EmguDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            CvInvoke.cvNamedWindow("Hello");
            IntPtr img = CvInvoke.cvLoadImage("C:\\1.jpg", Emgu.CV.CvEnum.LOAD_IMAGE_TYPE.CV_LOAD_IMAGE_ANYCOLOR);
            CvInvoke.cvShowImage("Hello", img);
            CvInvoke.cvWaitKey(0);
            CvInvoke.cvReleaseImage(ref img);
            CvInvoke.cvDestroyWindow("Hello");
        }
    }
}

注意更改图片的绝对路径。这种错误不要再犯。

六、错误处理

大部分遇到的问题都是一样,“cvinvoke”异常。

个人感觉,还是DLL链接库没有完整拷贝到程序文件夹导致的。

这里给出几个解决方案供大家参考。

(一)“EmguCV+VS2010 C#,cvinvoke异常的解决办法”

http://blog.sina.com.cn/s/blog_6233611f01016mpj.html

尝试了一下,没通过,但是后来重新看了一下,是我没有严格按照步骤处理,但后来的解决方案,和他的差不多。学习不认真( ⊙ o ⊙ )啊!

(二)EMGU官网给出的权威解决办法,全英文,比较简单,翻译一下关键部分。

Have you installed MSVCRT?

是否安装了Microsoft Visual C++ 2010 SP1可再发行组件包x86,现在基本都带了,这个不是问题。

Have you copied the OpenCV dlls to the execution directory?

Make sure the unmanaged DLLs are in the execution directory.

  • For EMGU CV version 2.4 cudart64_42_9.dll, cvextern.dll, npp64_42_9.dll, opencv_calib3dXXX.dll, opencv_contribXXX.dll, opencv_coreXXX.dll, opencv_features2dXXX.dll, opencv_flannXXX.dll, opencv_highguiXXX.dll, opencv_imgprocXXX.dll, opencv_legacyXXX.dll, opencv_mlXXX.dll, opencv_nonfreXXX.dll, opencv_objectdetectXXX.dll, opencv_videoXXX.dll, where XXX is the OpenCV version number.
  • For Emgu CV version >=2.4.2, this means the "x86" and "x64" folder and all the dlls within the folders. The folder names and file structures should not be altered when deploying with the application.

确认unmanaged DLLs 是否已经拷贝到程序文件夹。o(╯□╰)o  天生的缺陷。

这步很重要,把相关dll拷贝过去就OK了。

The best way to set up your project is:

  • Copy the unmanaged DLLs to your project folder
  • Right click on the project, click Add->Existing Item and select all unmanaged DLLs. Add them to the project.
  • For each of the included Dlls, left click on it, find the "Copy to Output Directory" option and select "Copy if newer"

最好的方法,就是把用到的unmanaged DLLs添加到工程中。

5点半起来送完客人,花了一个半小时把昨天的经验总结一下,头脑清爽,早上干活效率真是高效,写完可以去睡觉了。

[转载+原创]Emgu CV on C# (一) —— Emgu CV on Visual C# 2010,布布扣,bubuko.com

时间: 2024-11-03 01:20:43

[转载+原创]Emgu CV on C# (一) —— Emgu CV on Visual C# 2010的相关文章

[转载+原创]Emgu CV on C# (四) —— Emgu CV on 二值化

重点介绍了二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数)  1.概述 图像二值化是图像处理中的一项基本技术,也是很多图像处理技术的预处理过程. 图像的预处理在进行图像二值化操作前要对图像进行预处理,包括彩色图像灰化和增强.由于选取阈值需要参照直方图,因此在图像进行处理后,我们再获取图像的直方图以帮助选取阈值.整个流程如下所示: 读取图像→灰度图像→图像增强→图像直方图→二值化处理 2.数学原理(转载,基本可以不

[转载+原创]Emgu CV on C# (五) —— Emgu CV on 局部自适应阈值二值化

局部自适应阈值二值化 相对全局阈值二值化,自然就有局部自适应阈值二值化,本文利用Emgu CV实现局部自适应阈值二值化算法,并通过调节block大小,实现图像的边缘检测. 一.理论概述(转载自<OpenCV_基于局部自适应阈值的图像二值化>) 局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值.这样做的好处在于每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的.亮度较高的图像区域的二值化阈值通常会较高,而亮度较低的图像区域的二值化阈值则会相适

[转载+原创]Emgu CV on C# (三) —— Emgu CV on 均衡化

本文简要描述了均衡化原理及数学实现等理论问题,最终利用emgucv实现图像的灰度均衡. 直方图的均衡化,这是图像增强的常用方法. 一.均衡化原理及数学实现(转载) 均衡化原理及数学实现可重点参看——<直方图均衡化>和<图像处理(3)_灰度分布均衡化> 灰度分布均衡化又称直方图均衡化. 1.概述 这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候.通过这种方法,亮度可以更好地在直方图上分布.这样就可以用于增强局部的对比度而不影响整体的对比度,直方图

[转载+原创]Emgu CV on C# (二) —— Emgu CV on 灰度化

本文主要对彩色图片灰度化的方法及其实现过程进行总结,最终给出Emgu CV实现的代码. 一.灰度化原理及数学实现(转载自——<图像灰度化方法总结及其VC实现> 该篇文章使用opencv实现,后面附有代码,可以好好学习一下,比我写的好\(^o^)/~) 图像处理时,通常第一个步骤就是对采集到的彩色图像进行灰度化,这是因为黑白照片数据量小,相比彩照更易实现实时算法,另一方面黑白照片是由未处理的光线所形成的照片,因此从图像处理学角度来看,这种未经特殊滤光处理的图片所涵盖的信息更有价值. 目前,在图像

[转载+原创]Emgu CV on C# (七) —— Emgu CV on 轮廓检测

轮廓检测 对于查找轮廓我们一般要对图像Canny检测.但是对于很特殊的场合其实我们还可以直接对二值化的图像进行轮廓的提取. 关键函数 1. cvFindContours Retrieves contours from the binary image and returns the number of retrieved contours. The pointer firstContour is filled by the function. It will contain pointer to

[转载+原创]Emgu CV on C# (六) —— Emgu CV on Canny边缘检测

Canny边缘检测也是一种边缘检测方法,本文介绍了Canny边缘检测的函数及其使用方法,并利用emgucv方法将轮廓检测解算的结果与原文进行比较. 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘.Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法. Canny 边缘检测的数学原理和算法实现这里就不再了,有兴趣的读者可以查阅专业书籍. 一.概述(若果不想看,可以略过.转自:<C

基于Opencv的人脸检测及识别

一.实验目的:我这里完成的是,将8张人脸图片(4组,每组两张)存入库中,选取1张图片,程序识别出与其匹配的另一张. 这里介绍分三个步骤完成该工作,①程序读取摄像头.拍照 ②程序从电脑文档中读取图片   ③检测人脸,并用红框框出人脸 ④使用感知哈希算法匹配最相似的图片 二.实验环境: Win 7(x64).visual studio 2010.openCV-2.4.3 使用语言:C++ 三.实验准备:①安装好vs2010,本文不予介绍.   ②配置opencv : 1'进入官网下载http://o

Emgu CV 初试

Emgu CV 是.NET平台下对OpenCV图像处理库的封装,也就是.NET版.可以运行在C#.VB.VC++等. 安装完成后需要设置环境变量,比如我安装在D:\Emgu\emgucv-windows-universal-cuda 2.9.0.1922,然后再系统环境变量添加D:\Emgu\emgucv-windows-universal-cuda 2.9.0.192\bin即可 Emgu CV下载地址 http://sourceforge.net/projects/emgucv/files/

&quot;Emgu.CV.CvInvoke”的类型初始值设定项引发异常 解决办法

系统win7 32位,只在这一台电脑上出现这种问题,已知VS编译是X86,在数台电脑上测试都正常. 后来把opencv的dll路径例如 E:\...\x86  加入到系统环境变量中就正常了. emgucv安装里opencv的dll路径是这个样子 C:\Emgu\emgucv-windows-universal 3.0.0.2157\bin\x86,发布时把bin下的dll包括x86等拷贝到程序安装目录下. 但很奇怪这一台电脑无法使用,理论上emgucv发布不需要环境变量的. 还是要继续研究,欢迎