zoukankan      html  css  js  c++  java
  • 图像的基础操作

    1、先读取一个图片

    import cv2

    import numpy as np

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

    我们可以获取该图像的属性:行,列,通道,图像数据类型,像素数目等,具体如下。

    img.shape:获取图像的形状,返回值是一个包含行数,列数,通道数的元组

    img.size:图像的像素数目,长乘以宽乘以通道数。

    img.dtype:图像的数据类型

    img[xp, yp] = [B, G. R],应该是这种形式了,想要更改该像素值,

    直接给该坐标上面赋值BGR通道的值即可,当然,也可以分开赋值。如下:

    img[xp, yp, 0] = B

    img[xp, yp, 1] = G

    img[xp, yp, 2] = R

    其他方法:

    对于OpenCV的图像数据结构,我们通常使用 array.item() 来获取某一范围的像素内容并使用array.itemset()设置该像素的信息,比较列表嵌套并使用for循环遍历,是非常高效的。而且,程序的可读性会更好。我们来看下面的例子。

    import cv2import numpy as np

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

    # 打印像素点(10,10)的R通道值

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

    # 设置像素点(10,10)的R通道为110

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

    # 打印像素点(10,10)的R通道值

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

    2、图像ROI

     图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,

    因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI。

    使用numpy索引来获得

    import cv2
    import numpy as np
    img=cv2.imread('xxx.jpg')
    ball=img[280:340,330:390]
    img[273:333,100:160]=ball

    3、拆分及合并图像通道

    分别对BGR三个通道操作,有时候需要把独立通道的图片合成一个BGR图像。

    import cv2
    import numpy as np
    img=cv2.imread('/home/duan/workspace/opencv/images/roi.jpg') b,g,r=cv2.split(img)
    img=cv2.merge(b,g,r)
    或者
    import
    cv2 import numpy as np img=cv2.imread('/home/duan/workspace/opencv/images/roi.jpg') b=img[:,:,0]
    假如你想使所有像素的红色通道值都为 0,你不必先拆分再赋值。你可以
    直接使用 Numpy 索引,这会更快。
    import cv2
    import numpy as np
    img=cv2.imread('/home/duan/workspace/opencv/images/roi.jpg')
    img[:,:,2]=0
    警告:cv2.split() 是一个比较耗时的操作。只有真正需要时才用它,能用
    Numpy 索引就尽量用。
    4、为图像扩边(填充)
    如果你想在图像周围创建一个边,就像相框一样,你可以使用 cv2.copyMakeBorder()
    函数。这经常在卷积运算或 0 填充时被用到。这个函数包括如下参数:
    • src 输入图像
    • top, bottom, left, right 对应边界的像素数目。
    • borderType 要添加那种类型的边界,类型如下
    – cv2.BORDER_CONSTANT 添加有颜色的常数值边界,还需要
    下一个参数(value)。
    – cv2.BORDER_REFLECT 边界元素的镜像。比如: fedcba|abcde
    fgh|hgfedcb
    – cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT
    跟上面一样,但稍作改动。例如: gfedcb|abcdefgh|gfedcba
    – cv2.BORDER_REPLICATE 重复最后一个元素。例如: aaaaaa|
    abcdefgh|hhhhhhh
    – cv2.BORDER_WRAP 不知道怎么说了, 就像这样: cdefgh|
    abcdefgh|abcdefg
    • value 边界颜色,如果边界的类型是 cv2.BORDER_CONSTANT
     
  • 相关阅读:
    CCCC L3-015. 球队“食物链”(dfs+剪枝)
    【USACO2.1】解题报告
    【USACO2.1】解题报告
    序列【模拟】
    序列【模拟】
    【JZOJ5184】Gift【DP】【01背包】
    【JZOJ5184】Gift【DP】【01背包】
    【JZOJ5177】TRAVEL【并查集】
    【JZOJ5177】TRAVEL【并查集】
    【JZOJ5178】So many prefix?【KMP】【DP】
  • 原文地址:https://www.cnblogs.com/h694879357/p/12271329.html
Copyright © 2011-2022 走看看