OpenCV-图像基础操作
- 获取并修改像素值
1 import numpy as np 2 import cv2 3 4 img = cv2.imread("../image/min.jpg") 5 6 print(cv2.__file__) 7 # 方法一 8 px = img[100, 100, 1] 9 print(px) 10 img[100, 100, 1] = 20 # 设置像素值 11 12 # 方法二 13 print(img.item(100, 100, 1)) 14 img.itemset((100, 100, 1), 20) # 设置像素值
- 图像ROI
对图像特定区域进行操作,例如我们要检测一副图像中眼睛的位置,我们首先应该在图像中找到脸,再在脸的区域中找眼睛,而不是直接在一幅图像中搜索。这样会提高程序的准确性和性能。
1 import numpy as np 2 import cv2 3 4 img = cv2.imread("../image/min.jpg") 5 6 # 将图像分割为三通道,使用split()方法比较耗时 7 b, g, r = cv2.split(img) 8 9 # 合并通道 10 img = cv2.merge(b, g, r)
另外一种方式:cv2.split() 是一个比较耗时的操作。只有真正需要时才用它,能用Numpy 索引就尽量用。
1 # 获取蓝色通道 2 b = img[:, :, 0] 3 print(b)
- 为图像扩边填充
如果你想在图像周围创建一个边,就像相框一样,你可以使用 cv2.copyMakeBorder()函数。这经常在卷积运算或 0 填充时被用到。这个函数包括如下参数:
src 输入图像
top, bottom, left, right 对应边界的像素数目
borderType 要添加那种类型的边界,类型如下 :
– cv2.BORDER_CONSTANT 添加有颜色的常数值边界,还需要下一个参数( value)。
– cv2.BORDER_REFLECT 边界元素的镜像。比如: fedcba|abcdefgh|hgfedcb
– cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT跟上面一样,但稍作改动。例如: gfedcb|abcdefgh|gfedcba
– cv2.BORDER_REPLICATE 重复最后一个元素。例如: aaaaaa|abcdefgh|hhhhhhh
– cv2.BORDER_WRAP
value 边界颜色,如果边界的类型是 cv2.BORDER_CONSTANT
1 import cv2 2 import numpy as np 3 from matplotlib import pyplot as plt 4 5 RED=[255,0,0] 6 8 img1=cv2.imread('../image/min.jpg') 9 10 # BGR转成RGB矩阵 11 img1 = img1[:, : ,::-1] 12 13 replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE) 14 reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT) 15 reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101) 16 wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP) 17 constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=RED) 18 19 plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL') 20 plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE') 21 plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT') 22 plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101') 23 plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP') 24 plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT') 25 plt.show()
结果:


浙公网安备 33010602011771号