关于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显示图片:
1 var img = CvInvoke.cvLoadImage(imgname, Emgu.CV.CvEnum.LOAD_IMAGE_TYPE.CV_LOAD_IMAGE_ANYCOLOR); 2 CvInvoke.cvNamedWindow("mainWin"); 3 if (img == null) 4 { 5 CvInvoke.cvReleaseImage(ref img); 6 continue; 7 } 8 CvInvoke.cvShowImage("mainWin", img);
EmguCV显示视频:
1 IntPtr CatchFrame = CvInvoke.cvCreateFileCapture(path.ToString()); 2 // 得到总帧数 3 var count = CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT); 4 // 视频宽度 5 int wd = (int)CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH); 6 // 视频高度 7 int hg = (int)CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT); 8 // 当前帧位置 9 //CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_FRAMES); 10 // 帧频 11 CvInvoke.cvGetCaptureProperty(CatchFrame, Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS); 12 13 IntPtr FrameImg; 14 int i = 0; 15 CvInvoke.cvNamedWindow("mainWin"); 16 //灰度图 17 //IntPtr grayImg = CvInvoke.cvCreateImage(new Size(wd,hg),Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U,1); 18 while ((FrameImg = CvInvoke.cvQueryFrame(CatchFrame)) != IntPtr.Zero) 19 { 20 //转换为灰度图 21 //CvInvoke.cvCvtColor(FrameImg, grayImg, Emgu.CV.CvEnum.COLOR_CONVERSION.BGR2GRAY); 22 //EmguCV中的Image 转换为 C#中的Bitmap 23 //Image<Bgr, byte> FramePic = new Image<Bgr, byte>(wd, hg); 24 //CvInvoke.cvCopy(FrameImg, FramePic, IntPtr.Zero); 25 //Bitmap bt = new Bitmap(FramePic.ToBitmap()); 26 //FramePic.Dispose(); 27 CvInvoke.cvShowImage("mainWin", FrameImg ); 28 } 29 CvInvoke.cvReleaseImage(ref FrameImg ); 30 CvInvoke.cvDestroyWindow("mainWin");
另附上python的调用opencv的代码
python需要安装numpy和scipy!
显示图片代码:
1 import cv2 2 import numpy as np 3 #读取图片 4 img = cv2.imread("./IMGS/1.jpg") 5 #实例化8位图 6 emptyImage = np.zeros(img.shape, np.uint8) 7 emptyImage2 = img.copy() 8 #灰度图 9 emptyImage3 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 10 #显示图片 11 cv2.imshow("emptyImage",emptyImage) 12 cv2.imshow("emptyImage2",emptyImage2) 13 cv2.imshow("emptyImage3",emptyImage3) 14 cv2.imshow("img",img) 15 #保存图片 质量为5 和 100 16 cv2.imwrite("./1.jpg",img,[int(cv2.IMWRITE_JPEG_QUALITY),5]) 17 cv2.imwrite("./2.jpg",img,[int(cv2.IMWRITE_JPEG_QUALITY),100]) 18 #png压缩大小 19 cv2.imwrite("./3.png",img,[int(cv2.IMWRITE_PNG_COMPRESSION),0]) 20 cv2.imwrite("./4.png",img,[int(cv2.IMWRITE_PNG_COMPRESSION),9]) 21 22 #cv2.namedWindow("image") 23 #cv2.imshow("image",image) 24 cv2.waitKey(0) 25 cv2.destroyAllWindows()
播放视频,并把每帧保存成图片:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Author: 禾子三金 4 # @Date: 2015-08-05 17:45:45 5 # @Last Modified by: 禾子三金 6 # @Last Modified time: 2015-08-13 15:41:00 7 import cv2 8 9 videoCapture = cv2.VideoCapture("./cs.mp4",'utf-8') 10 11 fps = videoCapture.get(cv2.cv.CV_CAP_PROP_FPS) 12 size = (int(videoCapture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),int(videoCapture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT))) 13 14 success, frame = videoCapture.read() 15 i = 0 16 while success: 17 cv2.imshow("video",frame) 18 cv2.waitKey(1000/int(fps)) 19 cv2.imwrite("./img/%d.jpg" % i,frame) 20 i = i + 1 21 success, frame = videoCapture.read()
以上代码都是我自己网上找的demo或者自己写的简单例子,代码粗糙,嘿嘿。
我坚信:种一棵树最好的时间是十年前,其次是现在。