赞
踩
近几个月,也是一直在寻找自己以后的方向,一直在迷茫中,但也在不断得探索着。觉得自己最感兴趣的还是计算机技术这一块,尤其是计算机视觉。
从业以来,一直在做数据方面的工作,但个人认为这和我学习计算机视觉丝毫不矛盾,计算机视觉也会用到大量的数据,机器学习、人工智能等技术会经常接触。
计算机视觉中对图片的边缘检测,用到的算法其实就是滤波函数,通过过滤噪音,寻找真正的波的最大震荡位置。这种滤波函数其实完全可以用到股票交易中,将小的波形过滤掉,在大的波形中寻找买卖点。我之前智能选股系统还是有一些不足需要调整,比如对大盘牛市时找不到较好的进场点,这一块也许可以在滤波函数中寻找些什么灵感。所以学术很多东西都是相通的,没必要那么较真必须要在哪一领域一路磕到死。俗话说技多不压身,重要是你感兴趣,勇敢的去探索。
并且计算机视觉对未来医疗、无人驾驶等高科技领域有着不可或缺的地位。所以抱着极大的兴趣,我决定踏入计算机视觉的领域。
首先认识到的是OpenCV,初次见到它是在17年年底的时候。那时候领导让我制作一个银行高端客户服务系统的模型,说白了就是一套人脸识别系统,后端对接一个产品推荐系统。那时候对人脸识别一无所知,恰好安排了这样一个任务,在网上查阅了很多的资料,并且正好我对python这门语言还算熟悉,有很多成熟的接口和应用可以直接拿来使用,看了少许的源码,便可以着手制作了。其中就有OpenCV这么个东东。
具体什么是OpenCV,我就不赘述了,网上的介绍有很多。但是对于OpenCV可以做什么,网上没有太多具体的答案,都是一些只言片语,能做什么完全看自己的需求内容。
为了解决内心中的这个问题,我专门在网上找了一些答案,其中有个视频挺有趣的,介绍了OpenCV可以用来做什么,有兴趣的同学可以看看:
What things can be done using OpenCV? Watch this video
(打不开?联系:330444919)
视频中介绍了很多OpenCV在现实生活中使用的案例。比如下面这个截图,是对摄像机采集到的每一帧数据做处理,寻找出草坪的边界,并画出线条。
比如还可以识别物体,也是对摄像机捕获的数据进行处理分析,得到下面的效果:
不知你有没有好奇过虚拟现实中的3D效果是如何做出来的?OpenCV也可以带你找到答案。
既然可以识别出草坪的边界,那么对于车道的边界,也可以识别出来。我在想汽车在倒车时,上面的图像显示应该也可以利用OpenCV来实现吧。
视频的后面还录制了一段蚂蚁的运行轨迹,看起来也相当有趣。
完整版的视频已经被我下载下来了,在文章的末尾。
当然,除了以上这些案例,一定还有很多很多领域可以用到它,比如人脸识别、医疗图像等。好吧,就不一一列举了,赶紧带着强烈的好奇心,走进它吧。
上次是在ubuntu上进行安装的,需要进行源码编译,否则无法启动摄像头。为了避免这样类似的麻烦,我将OpenCV装在了windows系统中。
pip install opencv-contrib-python --upgrade
pip install opencv-python
- (cv) C:\Users\33044>python
- Python 3.6.7 |Anaconda, Inc.| (default, Oct 28 2018, 19:44:12) [MSC v.1915 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information.
- >>> import cv2
- >>> print(cv2.__version__)
- 3.4.3
在OpenCV的官方文档中有一份测试代码,可以创建一个camera-test.py
的文件
- import numpy as np
- import cv2
-
- cap = cv2.VideoCapture(0)
-
- while(True):
- # Capture frame-by-frame
- ret, frame = cap.read()
-
- # Our operations on the frame come here
- gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
-
- # Display the resulting frame
- cv2.imshow('frame',frame)
- cv2.imshow('gray',gray)
- if cv2.waitKey(20) & 0xFF == ord('q'):
- break
-
- # When everything done, release the capture
- cap.release()
- cv2.destroyAllWindows()
当运行python camera-test.py
时,你会看到摄像机启动两个画面,一个画面中是正常的颜色,一个画面是灰度图像,此时代表你的OpenCV安装得没有问题。
以下是我本人的学习笔记,我挑几个重要的点记录一下,以便有一些对OpenCV新的思考。
读取摄像头,在开头就已经介绍过,接下来读取视频文件。
和捕获摄像头一样,只是需要将VideoCapture()
的参数项改为视频文件的名称。
在读取视频的时候,cv.waitKey()
如果设置特别小,视频将会播放特别快;反之则反之。值设置为 25 毫秒视频是正常的速度。
- import numpy as np
- import cv2 as cv
-
- cap = cv.VideoCapture('YTTLJ.flv')
-
- while(cap.isOpened()):
- ret, frame = cap.read()
-
- gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
-
- cv.imshow('frame', gray)
- if cv.waitKey(1) & 0xFF == ord('q'):
- break
-
- cap.release()
- cv.destroyAllWindows()
运行上面的代码会出现视频的播放,播放速度较快,因为waitKey()
中的参数设置的为1。
你会发现视频的播放是没有声音的。当时我挺纳闷,难道OpenCV在处理视频的同时不处理音频吗?因此我特意去网上搜索了答案。
有网友解释说,OpenCV是一款计算机视觉的框架,所以只处理图像,不处理音频。
如果想要处理音频,可以使用另一款神器:ffmpeg
,日后有时间我也会写写它。
对于这一点,我有一些想法。近日我在处理一些视频,如果使用ffmpeg
的话,由于都是shell命令操作,有些需求可能没有办法做的很好,那么完全可以通过OpenCV
来完成。
当然在使用OpenCV
处理之前,需要向利用ffmpeg
将视频进行截取,然后提取出其音频。利用OpenCV
处理完视频之后,再通过ffmpeg
将音频拼起来即可!~
matplotlib
是python中一个功能丰富的可视化库,其可以与OpenCV结合,进行图像的处理。
具体操作如下:
- import numpy as np
- import cv2 as cv
- from matplotlib import pyplot as plt
- %matplotlib inline
-
- img = cv.imread('building.jpg', 0)
- plt.imshow(img, cmap='gray', interpolation='bicubic')
- plt.xticks([])
- plt.yticks([]) # to hide tick values on X and Y axis
- plt.show()
输出:
需要注意的是:OpenCV在加载图片时是BGR模式,而matplotlib是RGB模式。所以当图片以OpenCV加载进来时,通过matplotlib显示出来的颜色不会准确。
BGR:即蓝-绿-红色彩空间,每一个像素点都由一个三元数组来表示,分别代表蓝、绿、红。与之相对的RGB在数组表达时的顺序不同。
这也就理解了为什么matplotlib显示通过OpenCV加载进来的图片时颜色会不准确。
OpenCV也可以画各种图形,尤其是一些几何图形,通过会在一些应用中用到。
这里面没有什么可注意的地方,OpenCV
中的每个画图的函数用法都一样,只不过功能不同罢了。
下面举个例子,注意参数的填充:
- import numpy as np
- import cv2 as cv
-
- # Create a black image
- img = np.zeros((512, 512, 3), np.uint8)
-
- # Draw a diagonal blue line with thickness of 5 px
- cv.line(img, (0,0), (511, 511), (255, 0, 0), 5)
- # 画椭圆
- cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
- # 画长方形
- cv.rectangle(img,(384,0),(510,128),(0,255,0),5)
- # 画圆
- # 对象、圆心位置、半径、颜色、厚度
- cv.circle(img,(447,63), 63, (0,0,255), 7)
- # 画多边形
- pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
- pts = pts.reshape((-1,1,2))
- cv.polylines(img,[pts],True,(0,255,255))
-
- # 添加文字
- font = cv.FONT_HERSHEY_SCRIPT_SIMPLEX
- # 对象、文字内容、位置、字体、字体大小、颜色、字体线条厚度、线条类型
- cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
- cv.imshow('img', img)
- cv.waitKey(0)
- cv.destroyAllWindows()
输出:
今天对OpenCV就介绍到这里吧。文章开始对OpenCV有个初步的了解,知道它可以应用到很多的领域,接着介绍了如何安装OpenCV,在windows中安装它真的很简单。后面介绍了它的一些GUI特性。
写一篇文章将会记录如何利用OpenCV来处理图片。后面的内容会越来越来,我自己学习起来也会越来越费劲,道路坎坷,且行且珍惜吧…
欢迎关注威❤公众hao【咕泡AI】回复(123)即可白嫖领~~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。