快速上手Opencv--我们先从一个图像处理的helloworld开始
Opencv程序的helloworld
通常我们学习一门新的语言的时候,第一个运行的程序一般是helloworld。旨在向该程序说明,我已经开始了学习之路了,并且完成了一个简单的程序的实现。
helloworld的特点就是非常的简单,绝对的0基础。那么Opencv有没有这样一个helloworld的打开方式呢?肯定是有的,可惜我没有找到。但是大家不要慌张,这绝对不是一篇标题党,这里我会跟大家介绍一个我自己理解的helloworld程序,旨在说明,我们开始使用opencv了!
运行我们的第一个程序:打开一幅照片
这里我不介绍opencv的安装方式了,网上类似的介绍很多。我们直奔主题,如何用opencv打开一副本地照片。为了说明的更清晰,我采用图片的方式进行介绍,方便大家直观理解。
现在我们开始读取这个图片
import cv2 #第一步导入opencv模块
print(cv2.__version__) #检查一下我们的版本信息
3.4.2 #版本号信息
img=cv2.imread('katong.jpg',1) # 首先我们定义我们要读取的文件,cv2.imread是读取文件的函数
# 第一个参数‘katong.jpg'是要读取的照片的名称 ,第二个参数1代表彩色图像
# 如果是灰度图像,第二个参数为0
cv2.imshow('image',img) #cv2.imshow是显示图片的函数
#第一个参数'image'是图片显示的窗口形式,第二个参数就是我们上面的文件
cv2.waitKey(0) #这是一个暂停程序,由于程序语言都是逐行运行的,如果不对程序进行暂停操作,我们的操作会继续
#下一行指令,可能无法实现突破显示。
下面是这个图片的显示
图片写入
关于图片的写入,我们首先看一下代码,然后根据代码我们分析一下这中间发生了什么事情。
#第一步我们还是先导入cv2模块
import cv2
#这一步我们读取图片,注意这里我们只读取,并不做图片的显示
img=cv2.imread('katong.jpg',1)
#读取完图片之后,我们通过cv2.imwrite函数将该图片写入计算机,这一步相当于做了一个另存为:读取的文件名为'katong'
#存储的文件名为:'katong1'。那么我们为什么要做这么一步呢?这一步到底做了什么?这就要从上面的代码说起了。
#img=cv2.imread('katong.jpg',1)这一行命令实际上执行了四个动作,1读取图片;2封装格式解析;3,数据解码;4数据加载
#其中第一步和第四步是我们看得到的操作,第二步和第三步则是计算机自动运行的。关于这两步我们用下面的图显示
cv2.imwrite('katong1.jpg',img)
True
左边这幅图是我们第一个程序显示的图片属性,大小是65.8KB;右边这幅图是我们读取图片之后重新写入的图片属性,大小变为了130KB。为什么我们重新存储之后图片变大了?其实这就是上面程序说明里面提到的,图片的大小计算机是内部进行了压缩的。但是压缩的记录保存下来,我们再次写入的时候,这里就是原始的图像大小。
更改图片大小
JPG格式:有损压缩
和上面一样,我们先看代码
#第一步和第二步和之前一样,引入模块,读取数据
import cv2
img=cv2.imread('katong.jpg',1)
#大家重点看写入数据的变化,变化主要在后半段,
#’[cv2.IMWRITE_JPEG_QUALTY,30] 这个函数主要就是变更我们写入的数据的质量大小,或者叫像素大小,后面的值范围在0-100
#取值越小,像素越低
cv2.imwrite('katongtest.jpg',img,[cv2.IMWRITE_JPEG_QUALITY,0])
这种通过降低图片质量压缩图片大小的方式,我们就叫做有损压缩。
png格式:无损压缩
既然有有损压缩,就有无损压缩
老规矩,先上代码
#第一步和第二步引入模块,读取图片
import cv2
img=cv2.imread('katong.jpg',1)
#这里和JPG写入图片不同的是'[cv2.IMWRITE_PNG_COMPRESSION,0]'
#首先是JPEG改为PNG,其次是质量改为压缩比
#这里要注意,JPG质量范围是0-100,PNG压缩比是0-9
#JPG数字越小,越失真,PNG正好相反
cv2.imwrite('katongtest5.png',img,[cv2.IMWRITE_PNG_COMPRESSION,0])
今天就介绍这么多,这只是基本的基本,入门的入门(可能入门都算不上)后面我会继续介绍opencv的基本用法,如果对您有帮助,可以做个标记留意后续文章。