写点什么

打基础丨 Python 图像处理入门知识详解

  • 2022 年 4 月 19 日
  • 本文字数:2085 字

    阅读完需:约 7 分钟

本文分享自华为云社区《[Python图像处理] 一.图像处理基础知识及OpenCV入门函数》,作者: eastmount。

一.图像基础知识

图像都是由像素(pixel)构成的,即图像中的小方格,这些小方格都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置就决定该图像所呈现出来的样子。像素是图像中的最小单位,每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。

图像通常包括二值图像、灰度图像和彩色图像。

1.二值图像二值图像中任何一个点非黑即白,要么为白色(像素为 255),要么为黑色(像素为 0)。将灰度图像转换为二值图像的过程,常通过依次遍历判断实现,如果像素>=127 则设置为 255,否则设置为 0。

2.灰度图像灰度图像除了黑和白,还有灰色,它把灰度划分为 256 个不同的颜色,图像看着也更为清晰。将彩色图像转换为灰度图是图像处理的最基本预处理操作,通常包括下面几种方法:(1) 浮点算法:Gray=R0.3+G0.59+B0.11(2) 整数方法:Gray=(R30+G59+B11)/100(3) 移位方法:Gray=(R28+G151+B77)>>8;(4) 平均值法:Gray=(R+G+B)/3;(此程序采用算法)(5) 仅取绿色:Gray=G;(6) 加权平均值算法:根据光的亮度特性,公式: R=G=B=R0.299+G*0.587+B0.144

通过上述任一种方法求得 Gray 后,将原来的 RGB(R,G,B)中的 R,G,B 统一用 Gray 替换,形成新的颜色 RGB(Gray,Gray,Gray),用它替换原来的 RGB(R,G,B)就是灰度图了。改变象素矩阵的 RGB 值,来达到彩色图转变为灰度图。

3.彩色图像彩色图像是 RGB 图像,RGB 表示红、绿、蓝三原色,计算机里所有颜色都是三原色不同比例组成的,即三色通道。



二.OpenCV 读写图像

本文主要使用 Python2.7 和 OpenCV 进行讲解,首先调用"pip install opencv-python"安装 OpenCV 库,如下图所示:

1.读入图像 OpenCV 读图像主要调用下面函数实现:

img = cv2.imread(文件名,[,参数])参数(1) cv2.IMREAD_UNCHANGED (图像不可变)参数(2) cv2.IMREAD_GRAYSCALE (灰度图像)参数(3) cv2.IMREAD_COLOR (读入彩色图像)参数(4) cv2.COLOR_BGR2RGB (图像通道 BGR 转成 RGB)

2.显示图像显示图像调用函数如下:

cv2.imshow(窗口名, 图像名)

3.窗口等待调用函数如下:

cv2.waitKey(delay)键盘绑定函数,共一个参数,表示等待毫秒数,将等待特定的几毫秒,看键盘是否有输入,返回值为 ASCII 值。如果其参数为 0,则表示无限期的等待键盘输入;参数>0 表示等待 delay 毫秒;参数<0 表示等待键盘单击。

4.删除所有窗口调用函数如下:

cv2.destroyAllWindows() 删除所有窗口 cv2.destroyWindows() 删除指定的窗口

5.写入图片调用函数如下:

retval = cv2.imwrite(文件地址, 文件名)

下面代码是读入图片并显示保存。

# -*- coding:utf-8 -*-import cv2
#读取图片img = cv2.imread("test.jpg")
#显示图像cv2.imshow("Demo", img)
#等待显示cv2.waitKey(0)cv2.destroyAllWindows()
#写入图像cv2.imwrite("testyxz.jpg", img)
复制代码

输出结果如下图所示,并且在文件夹下保存了一张名为“testyxz.jpg”的图像。

如果代码中没有 watiKey(0)函数,则运行结果如下图所示:

同时可以对代码进行升级,如下所示:

#无限期等待输入k=cv2.waitKey(0)#如果输入ESC退出if k==27:    cv2.destroyAllWindows()
复制代码



三.OpenCV 像素处理

1.读取像素灰度图像直接返回灰度值,彩色图像则返回 B、G、R 三个分量。注意 OpenCV 读取图像是 BGR 存储显示,需要转换为 RGB 再进行图像处理。

灰度图像:返回值 = 图像(位置参数)eg: test=img[88,42]彩色图像:返回值 = 图像[位置元素, 0 | 1 | 2 ] 获取 BGR 三个通道像素 eg: blue=img[88,142,0] green=img[88,142,1] red=img[88,142,2]

2.修改图像修改图像如果是灰度图像则直接赋值新像素即可,彩色图像依次给三个值赋值即可。

灰度图像:img[88,142] = 255 彩色图像:img[88,142, 0] = 255img[88,142, 1] = 255img[88,142, 2] = 255 彩色图像:方法二 img[88,142] = [255, 255, 255]

下面代码是获取像素及修改的操作。

# -*- coding:utf-8 -*-import cv2
#读取图片img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)test = img[88,142]print testimg[88,142] = [255, 255, 255]print test
#分别获取BGR通道像素blue = img[88,142,0]print bluegreen = img[88,142,1]print greenred = img[88,142,2]print red
#显示图像cv2.imshow("Demo", img)
#等待显示cv2.waitKey(0)cv2.destroyAllWindows()
#写入图像cv2.imwrite("testyxz.jpg", img)
复制代码

输出结果如下所示:[158 107 64][255 255 255]255255255

下面代码是将行为 100 到 200、列 150 到 250 的像素区域设置为白色。

# -*- coding:utf-8 -*-import cv2
#读取图片img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#该区域设置为白色img[100:200, 150:250] = [255,255,255]
#显示图像cv2.imshow("Demo", img)
#等待显示cv2.waitKey(0)cv2.destroyAllWindows()
#写入图像cv2.imwrite("testyxz.jpg", img)
复制代码

运行结果如下图所示:

本文摘录自 eastmount X 华为云开发者社区联合出品的电子书《从零到一 • Python 图像处理及识别》。

点击免费下载电子书《从零到一 • Python图像处理及识别》

 

点击关注,第一时间了解华为云新鲜技术~​

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
打基础丨Python图像处理入门知识详解_Python_华为云开发者社区_InfoQ写作社区