博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV初学浅记
阅读量:3967 次
发布时间:2019-05-24

本文共 2408 字,大约阅读时间需要 8 分钟。

Opencv:open computer vision:开源的计算机视觉

文章目录


前言

opencv是什么?

opencv是什么?计算机视觉初学者(例如我),在接触opencv之前就已经接触过了,cv这个东西,我们都知道他是计算机视觉的简写,而加上open之后,无非就是加了开源两个字,字面意思。

OpenCV是一个开源,跨平台的计算机视觉和机器学习软件库,含有很多图像处理以及计算机视觉的通用算法。它虽然是用c++编写的,但却兼具了python和java等其他语言的接口,这使得我们可以用python去使用它。
值得注意的是,OpenCV虽然非常多跨平台中高层的API但是它却不依赖与其他外部包,同时却可以使用一些外部包

OpenCV-python的初始利用

1.安装OpenCV

对python环境已经安装好的设备来说,安装OpenCV无非就是一个pip命令。

pip install opencv-python -i https://pypi.douban.com/simple/

执行该命令时,可能会报错或者警告,但是大致情况都是要求用户在命令的尾部加上一个trusted…,表示信任该下载端,一般加上就可以解决。

测试是否安装成功

import cv2 as cv

等它跑一会,如果不报错的话一般就表示安装成功了。如下:

在这里插入图片描述

2.读取图像,展示图像,存储图像。

这里我用的是jupyter notebook,代码同样可以执行在cmd,pycharm等等环境上。

以下操作完成了对图像的简单操作

import cv2 as cvsrc=cv.imread('test_1.jpg',0)cv.namedWindow('input_1',cv.WINDOW_AUTOSIZE)cv.imshow('input_1',src)cv.waitKey(0)cv.destroyAllWindows()cv.imwrite('test_2.png',src)

imread方法:cv2.imread()总共有两个参数

参数1:文件路径
参数2:读取文件的方式,一般包含三种可以直接用1,0,-1表示
1:正常读取图像
0:读取灰度图像,就是我们常见的灰度图
-1:加载图像以及它的alpha通道,alpha通道指的是:一张图片的透明度和半透明度

  • namedWindow()方法:使用一个windows的GUI页面,我们需要用到这个GUI将图像显示出来。
  • imshow()方法:将图片展示到制定的GUI上。
  • waitkey(x)方法:该方法表示等待x毫秒,如果在这期间按下某个键,则会返回该键位的ascll,0为特殊情况,当x为0时表示等待无限长时间,直到按下某个键位为止。
  • destroyAllWindows(x)方法:字面意思,关闭所有的GUI窗口。
  • imwrite()方法:两个参数:参数一:存储文件的路径和名称;参数二:图像信息

执行结果为:

在这里插入图片描述以上为正常的执行结果。

3.图像的属性

上面提供的第一段代码是非常基本的一个读存的操作,接下里我们细细看一下,对计算机来说,这个图像到底是什么。首先,我们运行一下代码(随便找个图像文件即可)

import cv2 as cvsrc=cv.imread('test_1.jpg',1)print(src)

我们会得到这样一组数据:

在这里插入图片描述
很明显它是一堆矩阵,没错,对计算机来说,所谓的图片,其实就是一个多维的矩阵,我们时长关注图片的三个重要属性,高度,宽度,通道执行以下方法:

def get_image_info(image):    print(image)    print(image.shape)    print('图片的大小:',image.size)    print('字节位数:',image.dtype)

在这里插入图片描述

  • 这里的一堆矩阵也就是计算机眼中,这个图像的本质了。
  • (333,500,3)表示高度为333,宽度为500,3表示通道数,即每个像素点有3个通道。
  • 字节位数即,每个通道点所占有的字节位是多少位,8位表示一个字节。
  • 这个图片的大小很容易得到3335003*1=499500

4.视频文件的读取

视频文件也是图像文件的一种,这里我们直接通过调用摄像头来获取视频文件并提取每一帧图像。

代码:

def get_video():    capture=cv.VideoCapture(0)#调用摄像头    while True:        ret,frame=capture.read()        #将图像倒转过来        frame=cv.flip(frame,1)        cv.imshow('video',frame)        c=cv.waitKey(50)        if c==27 :            break
  • cv.VideoCapture(0):表示调用默认摄像头,这里的0,应该是一个filename的参数,表示调用什么摄像头,这里直接为0则默认。
  • capture.read():返回两个值,第一个是布尔值,若能正确获取帧,则返回True,否则返回false,到文件末位也返回False。第二个返回值就是一堆矩阵了,也就是每一帧图像。
  • cv.flip(frame,1):第一个参数为图像,第二个参数为处理方式,我们再调用摄像头的电脑反馈过来的图像是镜像,我们用1将其倒转过来。1表示水平方向翻转,0表示垂直翻转
    这段代码获取到的图像其实是有停顿的,只是我的waitley参数设置的很小,完全感觉不到,如果延迟设置到1000,2000就会很明显。

总结

这篇文章主要浅说了opencv是什么,干什么用的,以及一些图像的基本处理。博主应该会短时间速成OpenCV,有兴趣的小伙伴可以关注以下。😂

转载地址:http://ykcki.baihongyu.com/

你可能感兴趣的文章
[S3C6410]USB-HOST驱动完成
查看>>
Linux模块编程系列之二 熟悉特定的…
查看>>
Linux模块编程系列之二 熟悉特定的…
查看>>
Linux2.6内核驱动移植参考
查看>>
Linux2.6内核驱动移植参考
查看>>
设备标识及驱动程序所支持的设备(…
查看>>
设备标识及驱动程序所支持的设备(…
查看>>
EXPORT_SYMBOL()
查看>>
EXPORT_SYMBOL()
查看>>
在fedora9中编译linux设备驱动程序…
查看>>
在fedora9中编译linux设备驱动程序…
查看>>
LDDR3中scull编译问题
查看>>
LDDR3中scull编译问题
查看>>
内核模块转
查看>>
内核模块转
查看>>
ARM中断原理, 中断嵌套的误区,中…
查看>>
ARM中断原理, 中断嵌套的误区,中…
查看>>
struct device 中的dev_id哪里去了…
查看>>
struct device 中的dev_id哪里去了…
查看>>
Platform总线
查看>>