关于EmguCV我就不多说了,是对应于OpenCV的一套net库。

公司是视觉方面的业务,我又不会c++(好想会啊,正在学习中)。由于各种需求,自己觉得对c++不是特别感冒,所以选用了net下的opencv的封装EmguCV。python也有对应的opencv的库。无奈我python还处于入门阶段。

不废话,先说Emgucv的配置,我是看园子里的博客配置的,附上链接:

http://www.cnblogs.com/bomo/archive/2013/03/28/2986113.html

下面先演示一下简单的显示图片及视频。

视频需要安装ffshow解码器,自行百度下载

EmguCV显示图片:

 var img = CvInvoke.cvLoadImage(imgname, Emgu.CV.CvEnum.LOAD_IMAGE_TYPE.CV_LOAD_IMAGE_ANYCOLOR);
CvInvoke.cvNamedWindow("mainWin");
if (img == null)
{
CvInvoke.cvReleaseImage(ref img);
continue;
}
CvInvoke.cvShowImage("mainWin", img);

EmguCV显示视频:

 IntPtr CatchFrame = CvInvoke.cvCreateFileCapture(path.ToString());
// 得到总帧数
var count = CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT);
// 视频宽度
int wd = (int)CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH);
// 视频高度
int hg = (int)CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT);
// 当前帧位置
//CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_FRAMES);
// 帧频
CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS); IntPtr FrameImg;
int i = ;
CvInvoke.cvNamedWindow("mainWin");
//灰度图
//IntPtr grayImg = CvInvoke.cvCreateImage(new Size(wd,hg),Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U,1);
while ((FrameImg = CvInvoke.cvQueryFrame(CatchFrame)) != IntPtr.Zero)
{
//转换为灰度图
//CvInvoke.cvCvtColor(FrameImg, grayImg, Emgu.CV.CvEnum.COLOR_CONVERSION.BGR2GRAY);
//EmguCV中的Image 转换为 C#中的Bitmap
//Image<Bgr, byte> FramePic = new Image<Bgr, byte>(wd, hg);
//CvInvoke.cvCopy(FrameImg, FramePic, IntPtr.Zero);
//Bitmap bt = new Bitmap(FramePic.ToBitmap());
//FramePic.Dispose();
CvInvoke.cvShowImage("mainWin", FrameImg );
}
CvInvoke.cvReleaseImage(ref FrameImg );
CvInvoke.cvDestroyWindow("mainWin");

另附上python的调用opencv的代码

python需要安装numpy和scipy!

显示图片代码:

 import cv2
import numpy as np
#读取图片
img = cv2.imread("./IMGS/1.jpg")
#实例化8位图
emptyImage = np.zeros(img.shape, np.uint8)
emptyImage2 = img.copy()
#灰度图
emptyImage3 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#显示图片
cv2.imshow("emptyImage",emptyImage)
cv2.imshow("emptyImage2",emptyImage2)
cv2.imshow("emptyImage3",emptyImage3)
cv2.imshow("img",img)
#保存图片 质量为5 和 100
cv2.imwrite("./1.jpg",img,[int(cv2.IMWRITE_JPEG_QUALITY),5])
cv2.imwrite("./2.jpg",img,[int(cv2.IMWRITE_JPEG_QUALITY),100])
#png压缩大小
cv2.imwrite("./3.png",img,[int(cv2.IMWRITE_PNG_COMPRESSION),0])
cv2.imwrite("./4.png",img,[int(cv2.IMWRITE_PNG_COMPRESSION),9]) #cv2.namedWindow("image")
#cv2.imshow("image",image)
cv2.waitKey(0)
cv2.destroyAllWindows()

播放视频,并把每帧保存成图片:

 #!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: 禾子三金
# @Date: 2015-08-05 17:45:45
# @Last Modified by: 禾子三金
# @Last Modified time: 2015-08-13 15:41:00
import cv2 videoCapture = cv2.VideoCapture("./cs.mp4",'utf-8') fps = videoCapture.get(cv2.cv.CV_CAP_PROP_FPS)
size = (int(videoCapture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),int(videoCapture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT))) success, frame = videoCapture.read()
i = 0
while success:
cv2.imshow("video",frame)
cv2.waitKey(1000/int(fps))
cv2.imwrite("./img/%d.jpg" % i,frame)
i = i + 1
success, frame = videoCapture.read()

以上代码都是我自己网上找的demo或者自己写的简单例子,代码粗糙,嘿嘿。

              我坚信:种一棵树最好的时间是十年前,其次是现在。

EmguCV学习——简单使用的更多相关文章

  1. EmguCV学习——简单算法 差分与高斯

    公司项目需要检测运动物体,我对opencv也没啥研究,google了好久看了好多方法,最简单的就是差分与高斯背景建模了. 旁边搞c++的同事正在搞更nb的算法,等出来了 我再转成C#版的分享. 先看差 ...

  2. Javascript学习-简单测试环境

    Javascript学习-简单测试环境 在<JavaScript忍者秘籍>2.4测试条件基础知识中,作者给出了一个精简版的assert和assert组的实现,对于初学者而言,这无疑是一个很 ...

  3. EmguCV学习 与opencv的区别和联系

    openCV是因特尔的一个开源的视觉库,里面几乎包含了所有的图像处理的经典算法,并且采用C和少量的C++编写,运行效率很高,对于做图像处理这方面工作的,认识opencv是必须的工作.不过opencv有 ...

  4. neo4j初次使用学习简单操作-cypher语言使用

    Neo4j 使用cypher语言进行操作 Cypher语言是在学习Neo4j时用到数据库操作语言(DML),涵盖对图数据的增删改查  neo4j数据库简单除暴理解的概念: Neo4j中不存在表的概念, ...

  5. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...

  6. Python学习 - 简单抓取页面

    最近想做一个小web应用,就是把豆瓣读书和亚马逊等写有书评的网站上关于某本书的打分记录下来,这样自己买书的时候当作参考. 这篇日志这是以豆瓣网为例,只讨论简单的功能. 向服务器发送查询请求 这很好处理 ...

  7. (@WhiteTaken)设计模式学习——简单工厂

    最近工作比较忙,所以没有怎么写博客,这几天将集中学习一下(厉风行)讲解的设计模式的相关知识,并对主要的代码进行介绍. 言归正传,接下来介绍最简单也是最基础的简单工厂设计模式. 什么是简单工厂? 简单工 ...

  8. [Python学习] 简单网络爬虫抓取博客文章及思想介绍

            前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...

  9. 003.[python学习] 简单抓取豆瓣网电影信息程序

    声明:本程序仅用于学习爬网页数据,不可用于其它用途. 本程序仍有很多不足之处,请读者不吝赐教. 依赖:本程序依赖BeautifulSoup4和lxml,如需正确运行,请先安装.下面是代码: #!/us ...

随机推荐

  1. 三分钟部署Laxcus大数据管理系统

    Laxcus是Laxcus大数据实验室历时五年,全体系自主设计研发的国内首套大数据管理系统.能够支撑百万台级计算机节点,提供EB量级存储和计算能力,兼容SQL和关系数据库.最新的2.x版本已经实现对当 ...

  2. [ CodeVS冲杯之路 ] P1197

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1197/ 密钥的字母可以全转换为小写字母,然后一一映射,a→0,b→1,c→2,依此类推 对于密文只需将每一位减去对应密 ...

  3. KVM虚拟化(一)—— 介绍与简单使用

    一.架构及介绍 KVM(Kernel-based Virtual Machine)它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购: 自Linux 2.6.20后整合到内核, ...

  4. asp.net 播放flash

    注意3点: 1.路径,swf播放器对应的是当前页面的路径,flv视频对应的是swf播放器的路径2.路径中不能出现中文3.IIS设置,IIS站点属性中的HTTP头->MIME添加MIME影射关系, ...

  5. [vsftp]500 OOPS: cannot change directory

    这个报错需要检查 1./etc/passwd 用户的主目录 2./etc/vsftpd/vuser_conf 下每个用户的local_root 3.每个用户目录给ftpuser加上rwx权限,一定要有 ...

  6. rman--增量备份

    1.rman增量备份级别 级别0和全库备份相同,级别1备份执行的是差异备份. 2.增量备份 使用rman实现增量备份的级别0备份 RMAN database; 使用rman实现增量备份的级别1备份 d ...

  7. No.008 String to Integer (atoi)

    8. String to Integer (atoi) Total Accepted: 112863 Total Submissions: 825433 Difficulty: Easy Implem ...

  8. SVN与TortoiseSVN实战:文件加锁详解

    硬广:<SVN与TortoiseSVN实战>系列已经写了八篇,本篇是完结篇,整个系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,以技巧性为主. 本篇详解使用Tortoi ...

  9. form提交时,传递额外的参数

    在进行表单提交时,会遇到在提交前增加额外参数的情况,对此有如下几种解决方法: 1. 在表单里使用hidden的input,将参数放到里面. 缺点:在form表单里会增加一些input节点,感觉不爽. ...

  10. 修改 Ueditor 默认显示的字体大小

    默认字体为16px,有点大,为了美观而且一屏可以显示更多内容,可以修改为12px 打开:ueditor.all.min.js 我用的是压缩版 找到如下代码: body{margin:8px;font- ...