1、接受和修改像素值
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('./images/roi.jpg')
可以通过横纵坐标获得对用位置的像素值。返回值为[Blue,Green,Red]。
px = img[100, 100]
print(px)
[57 63 68]
blue = img[100,100,0]
print(blue)
57
img[100, 100] = [255, 255, 255]
print(img[100, 100])
[255 255 255]
上面的方法适合修改连续区域的像素值。
对于单个像素值得修改,使用arry.item()和array.itemset()是更好的办法。
img.item(10,10,2)
50
img.itemset((10, 10, 2), 100)
img.item(10, 10, 2)
100
2、接受图像的属性
图像的属性包括:行、列、通道数量;图像的数据类型;像素数量等。
print(img.shape)
(280, 450, 3)
print(img.size)
378000
print(img.dtype)
uint8
3、图像ROI
Region of Interest (ROI)即感兴趣的图像区域。可以对感兴趣的图像区域进行取值,赋值操作。
注意:用画图工具打开图片时,位置时(x, y)。具体差异是因为img是一个二维数组。二维数组确定图像上一点使用的行列,对应坐标轴恰好相反。。
width = 60
height = 60
x = 50
y = 170
ball = img[x:x+width, y:y+height]
img[0:0+width, 0:0+height] = ball
cv.imshow('head', img)
cv.waitKey(0)
cv.destroyAllWindows()
4、分割和合并颜色通道
b, g, r = cv.split(img) #cv.split()是高代价函数,在需要的时候使用
img = cv.merge((b, g, r))
b = img[:,:,0] #取出Blue通道的值
img[:,:,2] = 0 #对Red通道全赋0值
5、为图像制作边框(填充)
dst = cv.copyMakeBorder( src, top, bottom, left, right, borderType[, dst[, value]] )
borderType:
cv.BORDER_REFLECT:边框将镜像反射边框元素,如下所示:fedcba | abcdefgh | hgfedcb
cv.BORDER_REFLECT_101 or cv.BORDER_DEFAULT:和上面一样,但稍作改动,如下所示:gfedcb | abcdefgh | gfedcba
cv.BORDER_REPLICATE:最后一个元素在整个过程中被复制,如下所示:aaaaaa | abcdefgh | hhhhhhh
cv.BORDER_WRAP:无法解释,它将如下所示:cdefgh | abcdefgh | abcdefg
cv.BORDER_CONSTANT:添加一个常量彩色边框。 值应该作为下一个参数给出。value
BLUE = [255,0,0]
img1 = cv.imread('./images/logo.png')
replicate = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_WRAP)
constant= cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL'),plt.xticks([]),plt.yticks([])
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE'),plt.xticks([]),plt.yticks([])
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT'),plt.xticks([]),plt.yticks([])
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101'),plt.xticks([]),plt.yticks([])
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP'),plt.xticks([]),plt.yticks([])
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT'),plt.xticks([]),plt.yticks([])
plt.show()