美文网首页人生苦短-python
Python+OpenCV教程4:图像基本操作

Python+OpenCV教程4:图像基本操作

作者: e8bcb7ff1632 | 来源:发表于2018-01-05 14:14 被阅读1265次

    主站:http://ex2tron.wang
    原文:Python+OpenCV教程4:图像基本操作


    学习获取和修改像素点的值,ROI感兴趣区域,通道分离合并等基本操作。图片等可到源码处下载。


    目标

    • 访问和修改图片像素点的值
    • 获取图片的宽、高、通道数等属性
    • 了解感兴趣区域ROI
    • 分离和合并图像通道

    教程

    获取和修改像素点值

    我们先读入一张图片:

    import cv2
    
    img = cv2.imread('lena.jpg')
    

    通过行列的坐标来获取某像素点的值,对于彩色图,这个值是B,G,R三个值的列表,对于灰度图,只有一个值:

    px = img[100, 100]
    print(px)  # [119 108 201]
    
    # 只获取蓝色blue通道的值
    px_blue = img[100, 100, 0]
    print(px_blue)  # 119
    

    经验之谈:还记得吗?行对应的是y,列对应的是x,所以其实是img[y, x],需要注意噢(●ˇ∀ˇ●)

    修改像素的值也是同样的方式:

    img[100, 100] = [255, 255, 255]
    print(img[100, 100])  # [255 255 255]
    

    经验之谈:还有一种性能更好的方式,获取:img.item(100,100,0),修改:img.itemset((100,100,0),255),但这种方式只能B,G,R逐一进行

    图片属性

    img.shape获取图像的形状,图片是彩色的话,返回一个包含高度、宽度和通道数的元组,灰度图只返回高度和宽度:

    print(img.shape)  # (263, 263, 3)
    # 形状中包括高度、宽度和通道数
    height, width, channels = img.shape
    # img是灰度图的话:height, width = img.shape
    

    img.dtype获取图像数据类型:

    print(img.dtype)  # uint8
    

    经验之谈:很多错误都是因为数据类型不对导致的,所以健壮的代码需要对这个属性加以判断

    img.size获取图像总像素数:

    print(img.size)  # 263*263*3=207507
    

    ROI

    ROI:region of interest,感兴趣区域。什么意思呢?比如我们要检测眼睛,因为眼睛肯定在脸上,所以我们感兴趣的只有脸这部分,其他不需要关注,这样就可以大大节省计算量,提高运行速度。

    只关注脸( ╯□╰ )

    截取ROI非常简单,指定图片的范围即可:

    # 截取脸部ROI
    face = img[100:200, 115:188]
    cv2.imshow('face', face)
    cv2.waitKey(0)
    

    通道分割与合并

    彩色图的BGR三个通道是可以分开单独访问的,也可以将单独的三个通道合并成一副图像。分别使用cv2.split()cv2.merge()

    b, g, r = cv2.split(img)
    img = cv2.merge((b, g, r))
    

    split()函数比较耗时,更高效的方式是用numpy的索引,如提取B通道:

    b = img[:, :, 0]
    cv2.imshow('blue', b)
    cv2.waitKey(0)
    

    小结

    • img[y,x]获取/设置像素点值,img.shape:图片的形状(高度、宽度、通道数),img.dtype:图像的数据类型
    • img[y1:y2,x1:x2]进行ROI截取,cv2.split()/cv2.merge()通道分割/合并。更推荐的获取单通道方式:b = img[:, :, 0]

    练习

    1. 打开lena.jpg,将帽子部分(高:25120,宽:50220)的红色通道截取出来并显示。

    引用

    相关文章

      网友评论

        本文标题:Python+OpenCV教程4:图像基本操作

        本文链接:https://www.haomeiwen.com/subject/qgxsnxtx.html