图像处理

Posted xjlearningai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像处理相关的知识,希望对你有一定的参考价值。

一、图像读入、显示和保存

1.读入图像

retval = cv2.imread(文件名[, 显示控制参数])

显示控制参数参数如下:

cv.IMREAD_UNCHANGED

cv.IMREAD_GRAYSCALE

cv.IMREAD_COLOR

……

2.显示图像

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

例如:

cv2.imshpw("demo", image)

 

等待命令:

retval = cv2.waitKey([, delay])

delay:

delay>0 等待delay毫秒

delay<0 等待键盘单击

delay=0 无限等待

 

删除所有窗口:

cv2.destroyAllWindows()

3.保存图像

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

 

二、图像处理入门基础

opencv中,彩色图像的通道顺序和通常的图像描述不同,使用的顺序是:B、G、R。

图像转换:

彩色图像转换成灰度图像;

灰度图像转换为二值图像等。

 

三、像素处理

1.读取像素

返回值 = 图像(位置参数)

对于灰度图:

p = img[10, 100]

对于RGB图像:

blue = img[10, 100, 0], green = img[10, 100, 1], red = img[10, 100, 2]

2.修改像素值

像素 = 新值

例如:

对于灰度图像:

img[10, 100] = 255

对于RGB图像:

img[10, 100] = [255, 255, 255]

 

四、numpy访问像素

1.读取像素

返回值 = 图像.item(位置参数)

对于灰度图像:

p = img.item(10, 100)

对于RGB图像:

blue = img.item(10, 100, 0), green = img.item(10, 100, 1), red = img.item(10, 100, 2) 或者 三通道数组 p = img.item(10, 100)

2.修改像素值

图像名.itemset(位置, 新值)

对于灰度图像:

p = img.itemset((10, 100), 255)

对于RGB图像:

img.itemset((10, 100, 0), 255), img.itemset((10, 100, 10), 255),  img.itemset((10, 100, 2), 255) 

 

五、获取图像属性

1.形状:行、列、通道;

shape可以获取图像的形状,返回包含行数、列数、通道数的元组。

例如:

import cv2

img1 = cv2.imread(‘灰度图像文件名‘)

print(img1.shape)

 

# (512, 512)

 

或者:

import cv2

img2 = cv2.imread(‘彩色图像文件名‘)

print(img2.shape)

 

# (512, 512, 3)

 

2.像素数目;

size可以获取图像的像素数目。

灰度图像 返回:行数×列数

彩色图像 返回:行数×列数×通道数

例如:

import cv2

img = cv2.imread(‘图像文件名‘)

print(img.size)

 

# 786432

 

3.图像的数据类型;

dtype返回的数图像的数据类型

例如:

import cv2

img = cv2.imread(‘图像文件名‘)

print(img.dtype)

 

# uint8

六、图像ROI

图像感兴趣区域。

import cv2

img = cv2.imread(‘图像名‘)

face = img[200:400, 200:400]

 

七、通道拆分和合并

1.拆分通道

import cv2

img = cv2.imread(‘图像名‘)

b, g, r = cv2.split(img)

 

2.合并通道

import cv2

img = cv2.imread(‘图像名‘)

b, g, r = cv2.split(img)

m = cv2.merge([b, g, r])

 

八、图像加法 

1.numpy加法

取模加法

结果=图像1+图像2

若:

图像1+图像2<=255,结果=图像1+图像2;

图像1+图像2>255,结果=(图像1+图像2)%255;

2.opencv加法

饱和运算

结果=cv2.add(图像1, 图像2)

若:

图像1+图像2<=255,结果=图像1+图像2;

图像1+图像2>255,结果=255;

 

九、图像融合

将2张或者2张以上的图像信息融合到1张图像上

函数addWeighted

例如:

dst = cv2.addWeighted(src1, alpha, src2, bata, gamma)

dst = src1 * alpha + src2 * beta +gamma

注、亮度调节值gamma不能省略

 

十、类型转换

将图像由一种类型转换为另一种类型。

opencv提供了200多种不同类型之间的转换。

常用的如下:

cv2.COLOR_BGR2GRAY

cv2.COLOR_BGR2RGB

cv2.COLOR_GRAY2BGR

例如:

import cv2

a = cv2.imread(‘图像名‘)

b = cv2.cvtColor(a, cv2.COLOR_BGR2GRAY)

 

十一、图像缩放

函数resize

dst = cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

其中,dsize和fx, fy设置一个即可。

例如:

b = cv2.resize(a, (122, 122))   元祖中第一个为列,第二个为行。

b = cv2.resize(a, None, fx=0.5, fy=0.7)

 

十二、图像翻转

函数flip

dst = cv2.flip(src, flipCode)

其中,flipCode:

flipCode=0,以X轴为对称轴翻转;

flipCode>0,以Y轴为对称轴翻转;

flipCode<0,以X轴、Y轴方向同时翻转。

例如;

dst = cv2.flip(src, 1)

 

十三、基础理论

 

以上是关于图像处理的主要内容,如果未能解决你的问题,请参考以下文章

Python 图像处理 OpenCV :图像平滑(滤波)处理

小波变换图像处理

用C#做数字图像处理还是用C++做数字图像处理,刚进入研究生,做数字图像处理,看C++数字图像处理的书

图像处理和数据增强

数字图像处理的三个层次

youcans 的图像处理学习课11. 形态学图像处理(下)