• OpenCV-Python 学习(二) OPENCV 中核心操作


    一,图像的基础操作

    1,获取并修改像素值

    获取(速度比较慢)

    px=img[100,100]
    print px
    blue=img[100,100,0]
    print blue

    修改

    img[100,100]=[255,255,255]
    print img[100,100]

    另一种更好的方法(使用numpy)速度会更快

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

    2,获取图像的属性

    img.shape 行列通道

    img.size 像素数目

    img.dtype 数据类型

    注释:常用编码 # -*- coding: utf-8 -*-

    3,图像ROI

    ball=img[280:340,330:390]
    img[273:333,100:160]=ball

    4,拆分以及合并图像通道

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

    或者

    bgr

    b=img[:,:,0]   蓝色通道

    img[:,:,2]=0          红色通道置0

    5,图像填充

    BLUE=[255,0,0]
    img1=cv2.imread('opencv_logo.png')
    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()

    参数:img1输入图像 10,10,10,10是对应边界像素数目,边界类型(有颜色常数,镜像...)

    二,图像上的算数运算

    1,图像加法

    x = np.uint8([250])
    y = np.uint8([10])
    print cv2.add(x,y) # 250+10 = 260 => 255
    [[255]]
    print x+y # 250+10 = 260 % 256 = 4
    [4]

    OpenCV 中的加法与 Numpy 的加法是有所不同的。OpenCV 的加法
    是一种饱和操作,而 Numpy 的加法是一种模操作。

    2.图像混合

    import cv2
    import numpy as np
    img1=cv2.imread('ml.png')
    img2=cv2.imread('opencv_logo.jpg')
    dst=cv2.addWeighted(img1,0.7,img2,0.3,0)
    cv2.imshow('dst',dst)
    cv2.waitKey(0)
    cv2.destroyAllWindow()

    3,按位运算

    AND,OR,NOT,XOR

    三,程序优化

    1,检测程序效率

    import cv2
    import numpy as np
    e1 = cv2.getTickCount()
    # your code execution
    e2 = cv2.getTickCount()
    time = (e2 - e1)/ cv2.getTickFrequency()

    2,优化

    使用函数 cv2.useOptimized()
    来查看优化是否被开启了,使用函数 cv2.setUseOptimized() 来开启优化

  • 相关阅读:
    三、瀑布流中的ajax请求详解 Confi
    显示GridControl的横向滚动条
    耳目一新的感觉(转)
    JavaScript学习笔记——变量,作用域和内存管理
    Servlet编程笔记
    JavaScript,应该选择内嵌形式还是外链形式(Inline Code Versus External Files)
    JavaScript学习笔记——Javascript基本语法
    为主机空间添加一个phpmyadmin
    关于Post中明文传送密码以及其他
    Maven原理和Maven2新特性
  • 原文地址:https://www.cnblogs.com/nku-wangfeng/p/8941675.html
Copyright © 2020-2023  润新知