OpenCV - 像素操作(Python实现)

  1. 获取像素值并修改

首先需要读取一幅彩色图像,我们知道一幅图像可以看做一个三维矩阵,所以可以通过列表访问图像一个像素点。

#像素操作基础
import cv2
import numpy as np
img=cv2.imread('MyPic.jpg') #读取一幅图像
px=img[100,100] #读取像素点
print (px)
blue=img[100,100,0] #读取该点B值
print (blue)
img[100,100] = [0,0,0] #修改像素
print (img[100,100])

打印结果:

[255 255 255]
255
[0 0 0]

为了更快的操作我们可以调用 numpy 软件包里面的方法:

#像素操作基础
import cv2
import numpy as np
img=cv2.imread('MyPic.jpg') #读取一幅图像
px=img.item(100,100,0) #读取像素
print (px)
img.itemset((100,100,0),66)#修改像素点
px=img.item(100,100,0) #读取像素
print (px)

打印结果:

255
66

  1. 获取图像的属性(信息)

图像的属性包括:行,列,通道,图像数据类型,像素数目等。

img.shape 可以获取图像的形状。他的返回值是一个包含行数,列数,通道数的元组。
img.size 可以返回图像的像素数目。
img.dtype 返回的是图像的数据类型。

#像素操作基础
import cv2
import numpy as np
img=cv2.imread('MyPic.jpg') #读取一幅图像

print(img.shape)#打印图像形状
print(img.size)#打印图像大小
print(img.dtype)#打印图像数据类型

打印结果:

(739, 600, 3)
1330200
uint8

  1. 图像的 ROI()

 机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。
 ROI可以通过 Numpy 索引 获得。

#像素操作基础
import cv2
import numpy as np
img=cv2.imread('img1.PNG') #读取一幅图像
ROI = img[100:150,0:50]    #获取ROI区域
img[100:150,300:350] = ROI #进行修改
cv2.imwrite('img2.PNG',img)#图像写入

操作效果:
OpenCV - 像素操作(Python实现)_第1张图片

  1. 图像通道的拆分及合并

为了实现图像通道的拆分可以使用split()方法,而为了进行合并可以使用merge()方法。

#像素操作基础
import cv2
import numpy as np
img=cv2.imread('img1.PNG') #读取一幅图像
b,g,r=cv2.split(img)       #图像拆分
img=cv2.merge(b,g,r)       #图像组合 版本低的话只允许传入两个参数
cv2.imwrite('img2.PNG',img)#图像写入

同样,也可以使用 numpy 中的索引进行:

#像素操作基础
import cv2
import numpy as np
img=cv2.imread('img1.PNG') #读取一幅图像
img[:,:,1]= 0              #索引修改全图像素G为0
cv2.imwrite('img2.PNG',img)#图像写入

操作效果:
在这里插入图片描述
5. 为图像扩边(填充)

给图像添加边界:

cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value)

src: 源图像
top,bottem,left,right: 分别表示四个方向上边界的长度
borderType: 边界的类型

边界类型包括以下几种:

BORDER_REFLICATE     # 重复最后一个元素, aaaaaa | abcdefg | gggg
BORDER_REFLECT    # 镜像,abcdefg | gfedcbamn | nmabcd
BORDER_REFLECT_101    #和上面类似,会把边界空开,abcdefg | egfedcbamne | nmabcd
BORDER_WRAP       # 类似于这种方式abcdf | mmabcdf | mmabcd
BORDER_CONSTANT    # 添加有颜色的常数值边界,还需要下一个参数(value)。

#像素操作基础
import cv2
import numpy as np
img=cv2.imread('MyPic.jpg') #读取一幅图像
img1 = cv2.copyMakeBorder(img,30,30,30,30,cv2.BORDER_REFLECT)
cv2.imwrite('MyPic2.jpg',img1)#图像写入

操作效果:
OpenCV - 像素操作(Python实现)_第2张图片

你可能感兴趣的:(【OpenCV】)