zoukankan      html  css  js  c++  java
  • opencv_python学习笔记七

    图像的基础操作

    a获取像素值并修改

    b获取图像的属性(信息)

    c图像的ROI()

    d图像通道的拆分和合并

    1 获取并修改像素值

    import cv2
    import numpy as np

    img=cv2.imread('test.jpg')

    #取得像素
    px=img[20,20]
    print(px)
    blue=img[20,20,0]
    print(blue)

    #显示结果如下
    #[191 191 191]
    #191

    #修改像素
    img[20,20]=[255,255,255]
    print(img[20,20])

    #更好的方法
    print(img.item(10,10,2))
    img.itemset((10,10,2),100)
    print(img.item(10,10,2))

    2 获取图像属性

    print(img.shape)
    #(220,#行数

     265,#列数

     3)#通道数

     

    #取得图形的像素数
    print(img.size)
    #174900

    #返回图像的数据类型
    print(img.dtype)
    #uint8

    常用属性:

    通道

    图像数据类型

    像素数目

    3 图像的ROI

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2016/11/14 11:24
    # @Author  : Retacn
    # @Site    :  对一幅图像的特定区域进行操作,先择部分图像考贝到图像的其他区域
    # @File    : ROITest.py
    # @Software: PyCharm

    import cv2
    import numpy as np
    img=cv2.imread("test.jpg")
    ball=img[20:30,30:40]
    img[200:210,100:110]=ball

    #显示图像,窗口会自动调整为图像大小
    cv2.imshow("DrawView",img)
    #等待用户键入
    k=cv2.waitKey(0)
    #释放窗体
    cv2.destroyAllWindows()

    4 拆分及合并图像通道

    RGB拆分为单个通道

    把独立通道的图片合并成一个RGB图像

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2016/11/14 11:43
    # @Author  : Retacn
    # @Site    : 图像的拆分和合并图像通道
    # @File    : viewMarge.py
    # @Software: PyCharm

    import cv2
    import numpy as np

    img=cv2.imread('test.jpg')
    b,g,r=cv2.split(img)
    img=cv2.merge(b,g,r)


    #b=img[:,:,0]
    #img[:,:,2]

    5 为图像扩边

    cv2.copyMakeBorder()
    def copyMakeBorder(src, #输入图像
                       top, #对应边界的像素数
                       bottom,
                       left,
                       right,
                       borderType,#要添加的边界类型
                       dst=None,
                       value=None)

    cv2.BORDER_CONSTANT #添加有颜色的常数边界值
    cv2.BORDER_REFLECT #边界元素的镜像
    cv2.BORDER_REFLECT_101
    cv2.BORDER_REPLICATE #重复最后一个元素
    cv2.BORDER_WRAP

    示例代码如下:#!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2016/11/14 11:55
    # @Author  : Retacn
    # @Site    :
    # @File    : makeBorder.py
    # @Software: PyCharm

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt

    BLUE=[255,0,0]
    img1=cv2.imread("test.jpg")

    replicate=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
    reflect=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
    reflect101=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
    wrap=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
    constant=cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)

    plt.subplot(231),plt.imshow(img1,'gray'),plt.title("ORIGINAL")
    plt.subplot(232),plt.imshow(replicate,'gray'),plt.title("REPLICATE")
    plt.subplot(233),plt.imshow(reflect,'gray'),plt.title("REFLECT")
    plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title("REFLECT_101")
    plt.subplot(235),plt.imshow(wrap,'gray'),plt.title("WRAP")
    plt.subplot(236),plt.imshow(constant,'gray'),plt.title("CONSTANT")

    plt.show()

  • 相关阅读:
    EntityFramework之领域驱动设计实践(二)
    博客园开始对X++语言语法高亮的支持
    一种来源于Microsoft Dynamics AX的权限管理设计思想
    使用InternalsVisibleToAttribute控制internal成员的访问
    EntityFramework之领域驱动设计实践:总结
    EntityFramework之领域驱动设计实践(九)
    EntityFramework之领域驱动设计实践(三)
    EntityFramework之领域驱动设计实践(七)
    EntityFramework之领域驱动设计实践(五)
    EntityFramework之领域驱动设计实践 (一)
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194169.html
Copyright © 2011-2022 走看看