OpenCV初学浅记

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

文章目录

  • 前言
    • opencv是什么?
  • OpenCV-python的初始利用
    • 1.安装OpenCV
    • 2.读取图像,展示图像,存储图像。
    • 3.图像的属性
    • 4.视频文件的读取
  • 总结


前言

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

等它跑一会,如果不报错的话一般就表示安装成功了。如下:
OpenCV初学浅记_第1张图片

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

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

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

import cv2 as cv
src=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()方法:两个参数:参数一:存储文件的路径和名称;参数二:图像信息

执行结果为:
OpenCV初学浅记_第2张图片以上为正常的执行结果。

3.图像的属性

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

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

我们会得到这样一组数据:
OpenCV初学浅记_第3张图片
很明显它是一堆矩阵,没错,对计算机来说,所谓的图片,其实就是一个多维的矩阵,我们时长关注图片的三个重要属性,高度,宽度,通道执行以下方法:

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

OpenCV初学浅记_第4张图片

  • 这里的一堆矩阵也就是计算机眼中,这个图像的本质了。
  • (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,有兴趣的小伙伴可以关注以下。

你可能感兴趣的:(机器学习,python,opencv,计算机视觉)