小强学Python+OpenCV之-1.2图像基础
2017-05-22 18:53
609 查看
小强学Python+OpenCV之-1.2图像基础
小强学PythonOpenCV之12图像基础目标
什么是像素
坐标系统
操作像素
提取图像
目标
学完本节,我们将理解:1. 图像的基本元素是像素,什么是像素。
2. 图像的坐标系统是怎样的。
3. 操作像素的RGB值
4. 通过numpy数组操作图像
1. 什么是像素
像素是组成图像的最小单位。我们可以看下面这张图:我们常常像下面这样表述一幅图像的大小。
300 x 200大小。这里的300和200便是指的像素。一幅300 x 200的图像表示有300*200=6万个像素。
通常,像素的值我们称之为强度。这里可能要引入一个概念-“通道”才会比较好理解一点。
而图像通常会用两种方式表示:灰度图像和彩色图像。
灰度图像指的是,每个像素的值为一个8位无符号数表示的值,范围是:0-255.也就是说,灰度图像只是用一个通道来表示像素的强度。如下面的图所示:
而彩色图像是由三个8位(也有可能是16位,32位等)无符号数表示的值。什么?我没听错吧。三个数会表示成什么样子?没错,三个数表示成一个numpy数组(相当于一维数组)。三个数分别取不同的值(0-255),就可以表示出总共16777216种颜色。
对于三原色RGB的描述,可参考:RGB color model
坐标系统
假设我们有一幅5*5的图像,那么它的坐标是这样的:坐标系的原点在图像的左上角,像素(1,3)表示第1列第3行的像素(注意,这里是从0开始索引的)。
操作像素
我们已经知道了图像的坐标系统。那么,我们来尝试去对像素做一些修改,看看会发生什么。创建python脚本文件pixel_modify.py。加入内容如下:
# 导入库 import argparse import cv2 # 构建参数解析 ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="Path to the image") args = vars(ap.parse_args()) # 加载图像并显示 image = cv2.imread(args["image"]) cv2.imshow("Original", image) # 修改原点(左上角)像素值并显示,为了防止肉眼不好辨别,我们把左上角5*5个像素值同时作修改 image[0:5, 0:5] = (0, 0, 255) cv2.imshow("Color1", image) image[0:5, 0:5] = (0, 255, 0) cv2.imshow("Color2", image) image[0:5, 0:5] = (255, 0, 0) cv2.imshow("Color3", image) cv2.waitKey(0)
执行:
python pixel_modify.py
可以看到如下图:
(0,0,255)得到的是红色。
(0,255,0)得到的是绿色。
(255,0,0)得到的是蓝色。
从这里,我们可以看到,OpenCV中,对于图像三通道的值保存顺序是:BGR而不是我们习惯的RGB。这一点一定要记住。
提取图像
其实,在上面的代码中,我们在修改图像左上角像素值时,已经用到的numpy的切片功能来实现对于图像的操作。下面我们再做一个实验,巩固一下。修改代码如下:# 导入库 import argparse import cv2 # 构建参数解析 ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="Path to the image") args = vars(ap.parse_args()) # 加载图像并显示 image = cv2.imread(args["image"]) cv2.imshow("Original", image) # 计算图像的中心点 (h, w) = image.shape[:2] (cX, cY) = (w / 2, h / 2) # 将图像平均分成四部分并显示 tl = image[0:cY, 0:cX] tr = image[0:cY, cX:w] br = image[cY:h, cX:w] bl = image[cY:h, 0:cX] cv2.imshow("Top-Left Corner", tl) cv2.imshow("Top-Right Corner", tr) cv2.imshow("Bottom-Right Corner", br) cv2.imshow("Bottom-Left Corner", bl) cv2.waitKey(0)
执行脚本,得到如下显示:
OK。至此,我们知道了:
1. 像素是组成图像的最小单位,有灰度(单通道)和彩色图像(三通道)的区别。
2. 图像的坐标系原点位于图像的左上角,区别于笛卡尔坐标系的左下角。
3. OpenCV中对于彩色图像的三通道值保存顺序是BGR,而不是RGB。一定要牢记。
4. 对于图像的操作其实就是对表示图像的numpy数组的操作。要熟悉numpy(或python中的list和tuple)操作。可参考:廖雪峰Python教程
相关文章推荐
- python-opencv图像处理基础练习1
- 【AI基础】python:openCV——图像算术运算(2):按位运算
- python-opencv图像处理基础练习2
- 【AI基础】python:openCV——图像处理(2)
- 小强学Python+OpenCV之-1.1图像加载、显示、保存
- 【AI基础】python:openCV——图像算术运算(1)
- 【AI基础】python:openCV——图像处理(1)
- opencv-python人眼识别图像处理基础
- OpenCV-Python——图像的基础操作
- 基础学习笔记之opencv(11):图像混合
- Opencv Python版学习笔记(一)图像直方图
- opencv c++函数 基础4 使用OpenCV对两幅图像求和(求混合(blending))
- OpenCV2.4.6 与VS2008,Python2.7.5配置和图像载入显示
- 基础篇6-福利课-python基本数据类型讲解1.2
- 2.1 Mat—基础图像容器(OpenCV教程) .
- Python&OpenCV - 随机生成图像 与 图像的转维(reshape)
- opencv c++函数 基础1 Mat基本图像容器
- opencv基础 图像反转问题解决
- Python学习入门基础教程(learning Python)--1.2Python输入输出与处理 .
- Python for opencv 之 显示图像及在图像上书写文字