zoukankan      html  css  js  c++  java
  • opencv-python-学习笔记五(图像的基本操作)

    python-opencv中的图像表示

      OpenCV中图像读入的数据格式是numpy的ndarray数据格式。用数组描述图像。是BGR格式,取值范围是[0,255].

    分为三个维度:

    第一维度:Height 高度,对应图片的 行数

    第二维度:Width 宽度,对应图片的 列数

    第三维度:Value  代表BGR三通道的值   在opencv中,其中 0代表B,1代表G,2代表R

    import cv2 as cv
    import numpy as np
    
    
    img = np.zeros((3, 2, 3), np.uint8)#三行两列3个通道
    cv.imshow("image", img)
    k = cv.waitKey(0) & 0xFF

    获取单一像素值和修改

    方法一:直接访问

    以下参数含义:

    x:x坐标

    y:y坐标

    0:B通道   1:G通道  2:R通道

    首先加载一张彩色图片

    import cv2
    import numpy as np
    
    img = cv2.imread('4.jpg')

    访问像素

    px = img[y,x]
    print(px)  # 输出值是 x,y 处,蓝b,绿g,红r 的数组  [100,200,190] 
    px = img[y,x,0]
    print(px)  # 指定输出x,y处 ,0(B)通道的像素值  结果等于 157

    修改像素

    img[y, x] = [255, 255, 255]  # 修改(x,y)处3个通道的像素值为 [255,255,255]

    方法二:通过numpy优化库

    Numpy是一个优化的库,能够快速计算数组。所以如果一个个访问每个像素并修改它的值是很慢的,也不推荐。一般来说都是选择数组的一片区域进行修改。

    首先加载一张彩色图片

    import cv2
    import numpy as np
    
    img = cv2.imread('4.jpg')

    读取

    print(img.item(10, 10,2))

      如果想要访问BGR3个通道的值,需要分开访问,调用3次

    修改

    img.itemset((10, 10, 2), 100)

    图片ROI(region of interest)

    有时候,你会需要处理图片的特定区域。对于图片的眼部识别,首先对整个图片进行面部识别,找到脸以后,在脸的区域内找眼睛。这个方法能够提高准确度(因为眼睛总是在脸上的)性能上也好(因为我们找的区域更小)

    截取图片

    import cv2 as cv
    import numpy as np
    
    
    img = cv.imread('4.jpg')
    
    ball = img[280:340, 330:390] #img[y1:x1,y2:x2]  y1:x1 对角线左上点的值  y2:x2  对角线右下点的值 
    img[100:160, 150:210] = ball #img[y1:x1,y2:x2]

    cv.imshow("image",img) cv.waitKey(0)

    图像通道的分割和合并

    有时候可能需要将图片的3个通道分割出来,有时候会需要将一个通道合并到其它通道。

    拆分通道

    方法1:

    b,g,r = cv.split(img)

     参数:

     img:待拆分图像

    方法2:

    b = img[:,:,0]  #只获取图像的一个通道

    注意:假设你想把所有的红色像素变成0,你不用这么分割,你可以简单的使用Numpy索引,这样更快。img[:,:,2]=0

    警告:cv2.split()是一个成本很高的操作(执行时间),所以只在必要的时候使用。Numpy索引要更有效率,能用就用。

    合并通道

     dst=cv.merge(mv[, dst])

     参数:

    img = cv.merge((b,g,r)) 

     制作图片相框

  • 相关阅读:
    mongodb添加延时节点
    AFNetworking 遇到错误 Code=-1016 "Request failed: unacceptable content-type: text/plain"
    使用cocoa捕获dock栏中的“退出”事件,解决qt开发的应用程序退出异常的问题
    【Grails 代理Proxy设置】部署Grails遇到Error Resolve error obtaining dependencies:错误,及解决方法
    【转】MongoDB 3.0 正式版本即将发布,强力推荐
    求数组的一个最大子数组
    MergeSort 归并排序(java)
    java查询几个菜单下的所有下级菜单
    InsertionSort 直接插入排序(java)
    sublime3配置java开发环境
  • 原文地址:https://www.cnblogs.com/blog-xyy/p/11145725.html
Copyright © 2011-2022 走看看