1.先是在程序中图像的导入,我是根据图像路径实现,其中path是string类型,是图像路径。
IntPtr img=CvInvoke.cvLoadImage(path, Emgu.CV.CvEnum.LOAD_IMAGE_TYPE.CV_LOAD_IMAGE_ANYCOLOR);
2.图像灰度化处理,先创建一幅尺寸大小为为原图的8位图像GrayImg1:
Rectangle cr = CvInvoke.cvGetImageROI(img1);
int width = cr.Width;
int height = cr.Height;
IntPtr GrayImg1 = CvInvoke.cvCreateImage(cr.Size, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 1);
现在就能使用cvCvtColor函数实现灰度化:
CvInvoke.cvCvtColor(img1, GrayImg1, Emgu.CV.CvEnum.COLOR_CONVERSION.CV_BGR2GRAY);
3.直方图的创建,并获取数据
int[] hist_size = new int[1] { 256 };//建一个数组来存放直方图数据
IntPtr HistImg=CvInvoke.cvCreateHist(1, hist_size, Emgu.CV.CvEnum.HIST_TYPE.CV_HIST_ARRAY, null, 1);//创建了一个空的直方图
CvInvoke.cvCalcHist(inPtr1, HistImg,false,System.IntPtr.Zero);//计算inPtr1指向图像的数据,并传入Histimg中,其中IntPtr[] inPtr1 = new IntPtr[1] { SubImg}。
现在要获取Histimg中的具体数据:
for (int i = 0; i < 256; i++)
{
temphist[i] = CvInvoke.cvQueryHistValue_1D(histImg, i);
}
这样在数组temphist中保存了直方图数据。
4.对第一步中由cvLoadImage导入的图像进行像素点的操作。由于img 是IntPtr类型无法直接进行操作,所以首先要进行格式的转化,把IntPtr型转换成MIplImage:
Emgu.CV.Structure.MIplImage MIpImg =
(Emgu.CV.Structure.MIplImage)System.Runtime.InteropServices.Marshal.PtrToStructure(img, typeof(Emgu.CV.Structure.MIplImage));
然后再C#中使用unsafe中指针操作:npixel = (int)((byte*)img.imageData + img.widthStep * i)[j];
5.在二值话的图像,对不为零的区域经行检测。
IntPtr Dyncontour = new IntPtr();//存放检测到的图像块的首地址
IntPtr Dynstorage = CvInvoke.cvCreateMemStorage(0);开辟内存区域
int n= CvInvoke.cvFindContours(tempimg, Dynstorage, ref Dyncontour, StructSize.MCvContour, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_CCOMP,Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE, new Point(0, 0));
n表示检测到不为零区域的个数。
6.对第五步检测到的区域绘制轮廓
for(;DyncontourTemp!=null&&DyncontourTemp.Ptr.ToInt32()!=0;DyncontourTemp=DyncontourTemp.HNext)
{
CvInvoke.cvDrawContours(tempContImg, DyncontourTemp,new MCvScalar(255, 255, 255),new MCvScalar(255, 255, 255), 0, 1, Emgu.CV.CvEnum.LINE_TYPE.EIGHT_CONNECTED, new Point(0, 0));
}
其中的DyncontourTemp为
Seq<Point> DyncontourTemp1= new Seq<Point>(Dyncontour, null);//方便对IntPtr类型进行操作
Seq<Point> DyncontourTemp=DyncontourTemp1;
7.对第五步检测出的区域的坐标提取,通过cvFindContours函数的调用在 Dyncontour中存放的是不为零区域坐标的值存储在内存中的首地址指针。
seq<Point> DyncontourTemp1= new Seq<Point>(Dyncontour, null); //方便对IntPtr类型进行操作
int total=contourImg.Total;//contourImg包含的元素的总数
int TempX = 0; int TempY = 0;int[,] contourArray = new int[2,total];
//获得轮廓的坐标值
for (int i = 0; i < total;i++ )
{
contourArray[0,i]=contourImg[i].X;
contourArray[1,i]=contourImg[i].Y;
}
http://www.oncoding.cn/2010/opencv-ios-programming/
http://www.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5
openCV 是一个开源图形图像识别库
吐血推荐以下在C#下开发图像处理应用和研究能用的开源的库,还有很多更强悍的功能库,但是没有源代码的不一一列出,一下库都经过测试,我正在使用,欢迎交流pypzengqs@126.com,QQ:1024343803
http://www.emgu.com/wiki/index.php/Tutorial#Emgu,这个库封装了OpenCV,可以在C#中使用OpenCV
http://research.microsoft.com/en-us/um/cambridge/projects/infernet/default.aspx 这个库提供推理机和概率统计的功能,微软的产品
http://mathnet.opensourcedotnet.info/ 超级强悍的数学运算库,包含线性代数和信号处理以及符号运算模块
http://code.google.com/p/aforge/ C#图像处理库,吐血推荐
http://www.matthewajohnson.org/software/svm.html SVM.NET库支持支持向量机运算是libSVM
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
的C#版本,该站点还提供VISION.NET库支持视频处理。
OPENCV相信搞图像的都知道,绝大部分的图像处理算法里面都实现了。
分享到:
相关推荐
C#下的openCV Emgu CV 帮助手册及安装帮助说明
这是在C#中使用OpenCV的资源工具,已经将在C++中使用的opencv封装完成,解压缩之后可以选择exe文件重新下载,或者也可以直接使用我的emgucv文件夹,需要在环境变量的path中新添加路径bin/x64
opencv 图像图片相似度比对 C# emgu实现 1、opencv 的c#版 emgu 2 、图像相似度比对 3、灰度直方图
C#下的openCV(Emgu_CV)教程,使用Emgu_CV进行图像处理的同学可以用来参考一下,压缩包内容: Emgu_CV_Tutorial_Skander(EmguCV教程) Emgu_CV_Essentials 还有一个入门的教程
C#版本OpenCV之EmguCV测试1 1、库文件添加引用 2、读取图像 3、图像灰度化转换 4、图像边缘提取
在网上看到相关安装流程及代码,但是自己测试无法打开相机,故自己写个程序,运行成功。里面主要包括C#下的openCV(Emgu CV)安装文档和运行成功的代码。
实现opencv在C#语言中的开发,以工业摄像头Discovery MH15为例,解决了图片格式转换的问题。
C#使用OpenCV调用摄像头预览以及拍照(源码)代码是本人为了测试高拍仪调用所写
C#下的openCV(Emgu CV)入门用例,调用摄像头,显示图片,环境是vs2012,win64,其实我的还是Win8的OS,呵呵,网上有很多博客没有给出源码,我这里贡献出来
C# VS2017+EmguCV4.2 QRcode 二维码 检测,定位,标记,识别,划线标记支持任何角度二维码
c#下使用EmguCV操作摄像头和最简单的人脸检测 http://blog.csdn.net/a582127421/article/details/77745580
C#中的Emgucv调用由C++写的Opencv库
C#下用OPENCV的配置OPENCV,EMGUCV的使用方法,并给出在此环境下,处理图像和视频的代码。
openCV 中文手册 openCV 中文手册 openCV 中文手册
opencv emgucv 图片处理 窗体可视化处理
在c#中调用openCV画直方图程序编码,是EMGU CV中的调用。用于图像增强。
使用额使用VS2008 C# winform框架,采用emgucv(opencv for .net),开发的一个图像处理软件,由本人研究生课程的一个图像处理课程设计改编。包括图像处理基本算法。图像增强、图像分割等内容。注意编译前需要配置emgu...
emgu 是c#版本的 opencv,对c#需要处理图像的可以满足要求。配置方便
1、什么是OpenCVSharp 为了解决在Csharp下编写OpenCV程序的问题...其是OpenCV的.NET wrapper,它比Emgucv更接近于原始的OpenCV,并且有很多的样例参考,其采用LGPL发行,对商业应用友好(基本上相当于BSD)。 2、Open
Emgu是OpenCV的.net封装,这是一个用Emgu写的OCR识别的例子程序,供学习参考