openCV(二)——图像基本操作20.3.25

1.1 图片属性

  1. img.shape:获取图像的形状(元组),彩色图返回一个包含行数(高度)、列数(宽度)和通道数的元组,灰度图只返回行数和列数。
  2. img.dtype:获取图像数据类型。
  3. img.size:获取图像总像素数(高度 * 列数 * 通道数)。

1.2 获取和修改像素点

  1. img[100, 90]:获取行坐标为100,列坐标为90的像素点的值。
  2. img[100, 90, 0]:只获取该像素点blue通道的值。
  3. img[100, 90] = [255, 255, 255],改变这一像素点的值。
  4. 另一种性能更好的方法:
    获取:img.item(100,90,0)
    修改:img.itemset((100,100,0),255),这种方式只能B,G,R逐一修改。

1.3 区域截取

img[100:200, 115:188],前面的参数设定横坐标(纵向的范围),后面的参数设定列坐标(横向的范围)。

1.4 通道分割与合并

  1. 分割并合成一个图像

    import cv2
    img = cv2.imread('img/04.jpg')
    b, g, r = cv2.split(img)
    img = cv2.merge((b, g, r))
    
  2. 使用索引值提取单通道(性能好):

    b = img[:, :, 0]
    g = img[:, :, 1]
    r = img[:, :, 2]
    

1.5 颜色转换和追踪

1. cv2.cvtColor(p1,p2)用来进行颜色模型转换,p1是要转换的图片,p2是转换模式, COLOR_BGR2GRAY表示BGR→Gray。

  1. 可用下面的代码显示所有的转换模式:
patters = [i for i in dir(cv2) if i.startswith("COLOR_")]
print(patters)
  1. 使用HSV模型进行特定颜色追踪

    1. HSV](https://baike.baidu.com/item/HSV/547122)是一个常用于颜色识别的模型,相比BGR更易区分颜色,转换模式用COLOR_BGR2HSV表示。

    2. OpenCV中色调H范围为[0,179],饱和度S是[0,255],明度V是[0,255]。虽然H的理论数值是0°~360°,但8位图像像素点的最大值是255,所以OpenCV中除以了2,某些软件可能使用不同的尺度表示,所以同其他软件混用时,记得归一化。

    3. 实例:只显示蓝色物体

      import cv2
      import numpy as np
      img = cv2.imread('img/04.jpg')
      #获取HSV值的上下限范围
      blue = np.uint8([[[255,0,0]]])
      hsv_blue = cv2.cvtColor(blue,cv2.COLOR_BGR2HSV)
      print(hsv_blue) #[120,255,255]
      # 规定蓝色范围
      lower_blue = np.array([100,110,110])
      upper_blue = np.array([130,255,255])
      # 从BGP转换为HSV
      hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
      cv2.imwrite('img/hsv.jpg', hsv)
      # inRange():介于lower/upper之间的为白色,其余黑色
      mask = cv2.inRange(hsv,lower_blue,upper_blue)
      cv2.imwrite('img/mask.jpg', mask)
      # 只保留图中蓝色部分
      res = cv2.bitwise_and(img,img,mask=mask)
      cv2.imwrite('img/res.jpg', res)

1.6 图像几何变换

  1. 缩放图片
res1 = cv2.resize(img,(132,150)) #按照指定宽度、高度缩放图片
res2 = cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_LINEAR) #x,y轴放大一倍
  1. 镜像翻转图片
res1 = cv2.flip(img,0) # =0垂直翻转(沿x轴)
res2 = cv2.flip(img,1) # >0水平翻转(沿y轴)
res3 = cv2.flip(img,-1) # <0水平垂直翻转
  1. 平移图片
rows,cols = img.shape[:2]
#定义平移矩阵,需要是numpy的float32类型
M = np.float32([[1,0,100],[0,1,50]])# x轴平移100,y轴平移50
res = cv2.warpAffine(img,M,(cols,rows))
  1. 旋转图片
M = cv2.getRotationMatrix2D((cols/2,rows/2),45,0.5)
res1 = cv2.warpAffine(img,M,(cols,rows))
M = cv2.getRotationMatrix2D((cols/2,rows/2),-45,0.5)
res2 = cv2.warpAffine(img,M,(cols,rows))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值