一、图像基本知识
- 图像都是由像素(pixel)构成的,即图像中的小方格,这些小方格都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置就决定该图像所呈现出来的样子。像素是图像中的最小单位,每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。
- 灰度是表明图像明暗的数值,即黑白图像中点的颜色深度,范围一般从0到255,白色为255 ,黑色为0,故黑白图片也称灰度图像。 灰度值指的是单个像素点的亮度。 灰度值越大表示越亮。
- 灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每一个像素灰度值的方法。 目的是为了改善画质,使图像的显示效果更加清晰。 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。
图像一般包括三种:
1.二值图像
- 二值图像中任何一个点非黑即白,要么为白色(像素为255),要么为黑色(像素为0)。
- 其保存也相对简单,每个像素只需要1Bit就可以完整存储信息。如果把每个像素看成随机变量,一共有N个像素,那么二值图有2的N次方种变化,而8位灰度图有255的N次方种变化,8为三通道RGB图像有255255255的N次方种变化。也就是说同样尺寸的图像,二值图保存的信息更少。二值图像(binary image),即图像上的每一个像素只有两种可能的取值或灰度等级状态,人们经常用黑白、B&W、单色图像表示二值图像。
2.灰度图片
-
灰度图像除了黑和白,还有灰色,它把灰度划分为256个不同的颜色,也就是0-255之间不同的灰度值,图像看着也更为清晰。将彩色图像转换为灰度图是图像处理的最基本预处理操作;
-
灰度图像是二值图像的进化版本,是彩色图像的退化版,也就是灰度图保存的信息没有彩色图像多,但比二值图像多,灰度图只包含一个通道的信息,而彩色图通常包含三个通道的信息,单一通道的理解可以理解为单一波长的电磁波。【将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。】
-
灰度图像(gray image)是每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。
3.彩色图像
彩色图像是RGB图像,RGB表示红、绿、蓝三原色,计算机里所有颜色都是三原色不同比例组成的,即三色通道。
二、openCV安装
一般直接pip install opencv-python
即可安装。
或者:
安装openCV(解决no module named cv2)
三、openCV的一些基本操作
如果读取图像首先要导入OpenCV包,方法为:
import cv2
1. 加载图片
#step1:加载图片
img = cv2.imread('./out/cleaned7.jpg')
2.显示图像
cv2.namedWindow("first",2); #创建一个窗口,2代表可以调整窗口的大小(只显示图像的话可以不加这句代码,下面一句代码就够了)
cv2.imshow("first", img) #显示窗口名,以及图像
3.窗口等待
cv2.waitKey(0)
#键盘绑定函数,共一个参数,表示等待毫秒数,将等待特定的几毫秒,看键盘是否有输入,返回值为ASCII值。如果其参数为0,则表示无限期的等待键盘输入;参数>0表示等待delay毫秒;参数<0表示等待键盘单击。waitKey()与waitKey(0),都代表无限等待
4.删除所有窗口
cv2.destroyAllWindows() 删除所有窗口
5.保存图片
cv2.imwrite('./out/cleaned3.jpg', img)
#参数:文件地址,文件名。
整体代码来看一下:
#加载图片
img = cv2.imread('./out/cleaned7.jpg')
#显示图片
cv2.namedWindow("first",2);
cv2.imshow("first", img)
cv2.waitKey()
#保存图片
cv2.imwrite('./out/cleaned3.jpg', img)
扩展:
这边写一下彩色图–》灰度图—》二值图的变化代码:
import cv2
#读取图像
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")
#创建窗口
cv2.namedWindow("Image")
#在窗口显示图像
cv2.imshow("Image", img)
#不加下一句的话。在命令行中执行的话,则是一闪而过
cv2.waitKey ()
#灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#img_gray = rgb2gray(img)
cv2.namedWindow("gray",2);
cv2.imshow("gray", gray)
cv2.waitKey()
#cv2.cvtColor()把彩色图变为灰度图
#二值图
(_, thresh) = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)
cv2.imshow("gray", thresh)
cv2.waitKey()
#cv2.threshold()处理灰度图,把200-255之间的像素变为白色,其余为黑。
开始学习openCV第一课,主要学习来源:
[Python图像处理] 一.图像处理基础知识及OpenCV入门函数
谢谢大神的分享!