OpenCV 第一天:安装库与图像视频基本处理

最近选修了一门计算机视觉,老师上课就只讲理论,课后自学相关知识,所以写这篇博客用来记录OpenCV的学习并帮助回顾。

OpenCV是每一个计算机视觉从业者都要学的一个库,它是用来处理图像的,是由C++编写的。博主并不会C++,所以这次就先用python入门。

博主并不是计算机专业,所以本文若有些业余的话希望大家多多包涵。

第一步:安装相关库

直接在Anaconda prompt中pip install或者conda install即可

在安装库之前需要下载Anaconda。有关python的基础只是在此不多赘述

pip install opencv-python

此次只是opencv的入门学习,所以使用的是juypter,之后若是有计划做相关项目的话会用pycharm

除了opencv库之外还要下载一个opencv-contrib-python的拓展包。默认版本的opencv对应默认版本的contrib,如果下载的是其他版本的opencv,那么请查询对应拓展包的版本。本文使用最新的版本

也是直接pip install 即可

pip install opencv-contrib-python

本文采用的是默认的base环境,jupter也采用的base环境,如果使用pycharm不一定是默认环境,可能是自定义或者用anaconda创造的默认环境,pip install的包可能找不到,

pip下载的默认路径是:

扫描二维码关注公众号,回复: 15684079 查看本文章

C:\Users\(自己的用户名)\AppData\Roaming\Python\Python35\site-packages,

把这个路径下下载的包移到对应环境的site-package下就行

juypter运行opencv

首先import一下,print一下这个包看看运行有没有问题,没问题继续

import cv2
print(cv2)

返回

<module 'cv2' from 'D:\\anaconda\\lib\\site-packages\\cv2\\__init__.py'>

看一下运行路径,把测试用的材料都放到路径下,这样我们之后输入路径就不需要输入前缀

import os
print(os.path.abspath('.'))#看运行路径

利用cv2.imread(图形路径)方法读取图形img

import cv2 #opencv读取BGR文件
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline#此行代码就只有juypter可以识别,可以直接返回图片不需要show了

img = cv2.imread('hawk.jpg') #读取文件
img

从返回值可以看出来读取的文件img是ndarray类的一个三维矩阵,每个维度对应着图片的RGB,每个矩阵的元素值对应该栅格(像元,格点,不同专业叫法不一样,其实差不多)的值即颜色的深度,注意,opencv读取文件的格式是BGR类型的

opencv图像处理

用imread(图像路径)方法读取文件,用imshow(title,img对象)方法展示图片

cv2.waitKey()方法用于接受命令,类似c++的暂停,当参数是0时,按任意键执行下行代码,当参数是其他数字,例如100时,为展示100毫秒之后执行下一行代码,没有这行代码图片会一闪而过

cv2.destroyAllWindows()用于关闭窗口

import cv2 #opencv读取BGR文件
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

img = cv2.imread('bird.jpg') #读取文件
cv2.imshow('image',img)
cv2.waitKey(0) #0表示按任意键结束,#1000表示等待100毫秒,一般情况下用0
# cv2.waitKey(100) 
cv2.destroyAllWindows()

cv2.imread(path,cv2.IMREAD_GRAYSCALE)中cv2.IMREAD_GRAYSCALE指读取灰度图,这时img只有一个波段。

import cv2 #opencv读取BGR文件
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

img = cv2.imread('bird.jpg')
print(img.shape)#三维数组,返回(*,*,3)3指为GBR三个波段的图片

img = cv2.imread('bird.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('img',img)
cv2.waitKey(0) 
cv2.destroyAllWindows()

图像保存:cv2.imwrite(path,img)

cv2.imwrite('gray_bird.jpg',img)
cv2.destroyAllWindows()

视频处理

cv2.VideoCapture(path)读取视频vc

vc.isopen()若能打开,返回true,不能返回false

vc.read()读一帧,返回两个值,一个是布尔类型的值,如果这一帧能够打开就是True,反之Flase,第二个返回值是这个帧所对应的图像,就是上文的img,是ndarray类型的

import cv2 

#先读取文件的第一帧,看看能否打开
vc = cv2.VideoCapture('video1.mp4')
#vc.read()读取文件的第一帧,看看能否打开
if vc.isOpened():#返回True或Flase,代表能否打开
    open, frame  = vc.read()
else:
    open = False

#写一个循环,如果能打开,就播放读取的那一帧,直到读取到的那一帧没有画面位置
while open:
    ret,frame = vc.read()
    if frame is None:
        break #直到没有帧的时候跳出循环
    if ret == True:#如果打开这个帧没毛病
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #本身frame是BGR格式的图片,cv2.cvtColor(input_image, flag)现转换成灰度图
        cv2.imshow('result',gray)
        if cv2.waitKey(20) & 0xFF == 27: #这段代码表示每个帧的持续时间
            break
vc.release()
cv2.destroyAllWindows()

OK,今天先学到这里

猜你喜欢

转载自blog.csdn.net/m0_50317149/article/details/129533946
今日推荐