关于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. Visual 中控制台程序如何使用MFC类库

    unresolved external symbol __beginthreadex错误的解决Win32 Consle Application使用MFC的一些类如CString时编译时相信会很经常遇到 ...

  2. QTP 场景恢复– 函数调用

    创建自动化测试是为了实现无人值守下运行,但也给开发人员带来一些问题.假如你离开办公室前启动测试,想要让它通宵运行.然而,由于不可预见的错误,您的测试会在某一点停止,中断了测试结果.因此QTP中引入场景 ...

  3. 搭建基于Windows + Apache + PHP + MySQL的Moodle平台

    说起Moodle,我相信学习教育技术的同学应该都不陌生,在大学的网络与远程教育课中,我有幸与传说中的Moodle相遇,然后相知,但是我绝对不会跟你们说一直到我毕业,我都没有找到一个合适的时间与这位Ms ...

  4. Oozie JMS通知消息实现--根据作业ID来过滤消息

    一,介绍 本文使用Oozie的消息通知功能,并根据JMS规范中的消息选择器(Selector)实现 根据作业的ID来过滤消息. 首先搭建好JMS Provider(ActiveMQ) ,并进行相关配置 ...

  5. memcached学习(3)memcached的删除机制和发展方向

    memcached是缓存,所以数据不会永久保存在服务器上,这是向系统中引入memcached的前提. 本次介绍memcached的数据删除机制,以及memcached的最新发展方向--二进制协议(Bi ...

  6. Windows7下安装IIS出现“出现错误,并非所有的功能被成功更改

    1.开始,搜索输入UAC-->选择 “更改用户账户控制设置” 2.调到最低 3.打开控制面板-->程序-->打开或关闭windows功能,去掉图里的2个选项,点确定,重启 4.重启后 ...

  7. socket学习笔记——并发服务器与I/O程序分割客户端

    client.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <u ...

  8. CSS实用的代码段

    摘抄的一些代码还有自己总结的常用的代码~ 1>浏览器样式统一 *{ margin:0px; padding:0px; } 浏览器样式统一 2>清除浮动的方法 3>跨浏览器设置透明度 ...

  9. 开源项目:网页实时通信WebRTC

    参考资料 [博客系列] Android WebRTC 音视频开发总结 [环境编译] WebRTC入门指南 各平台WebRTC源码网盘下载 Ubuntu14.04编译WebRTC For Android ...

  10. 学习STL-介绍一下STL

    从大学时就开始学习C++,到现在近5年的时间了却很少用到STL.现在想想真得是对不起这门语言,也对不起宝贵的五年光阴.我钟爱C++,所以一定要完全搞懂它,理解它.爱一个人的前提是要懂他(她),爱一门语 ...