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()

 

结果:

posted @ 2019-07-17 14:18  bingma  阅读(312)  评论(0)    收藏  举报