示例:
import numpy as np
import cv2 as cv
img = cv.imread('sample_dog.jpg')
# ---------------------------
px = img[100,100]
print( px )
# [153 206 186]
#仅仅获取蓝色像素的值
blue = img[100,100,0]
>>> print( blue )
153
#修改像素点的值
img[100,100] = [255,255,255]
print( img[100,100] )
# [255 255 255]
# 以上都是用numpy数组的方式来完成操作,但这种方式速度较慢
#---------------------------
#换一种方式,100,100为像素坐标,0,1,2为 B,G,R
img.item(100,100,0)
# 153
img.item(100,100,1)
# 206
img.item(100,100,2)
# 186
# 验证
img[100,100]
# array([153, 206, 186], dtype=uint8)
示例:
# 图像维度
print( img.shape )
# (576, 768, 3)
# 图像大小
print( img.size )
1327104
# 图像数据类型
print( img.dtype )
# uint8
import numpy as np
import cv2 as cv
img=cv.imread('sample_dog.jpg')
dog=img[200:520,100:320]
img[200:520,500:720]=dog
cv.imshow('dog',img)
cv.waitKey(0)
cv.destroyAllWindows()
b,g,r = cv.split(img)
img = cv.merge((b,g,r))
# 修改red通道的值
img[:,:,2] = 0
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255,0,0]
img=cv.imread('sample_dog.jpg')
replicate = cv.copyMakeBorder(img,100,100,100,100,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img,100,100,100,100,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img,100,100,100,100,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img,100,100,100,100,cv.BORDER_WRAP)
constant= cv.copyMakeBorder(img,100,100,100,100,cv.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
# opencv中颜色为b,g,r。 因为在matplotlib 中red和blue会互换导致图像颜色变化
cv.copyMakeBorder() 参数含义:
value : cv.BORDER_CONSTANT,cv.BORDER_REFLECT,cv.BORDER_REFLECT_101 or cv.BORDER_DEFAULT ,cv.BORDER_REPLICATE,cv.BORDER_WRAP
cv.BORDER_CONSTANT - 定义一个边框颜色的常数
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 这样