• Python调用OpenCV像素操作


    Python调用OpenCV进行操作的时候基本上感觉就是对numpy进行操作,跟numpy是挺相关的。

    1、像素操作

    OpenCV获取图像(x,y)处的像素值:

    px=img[x,y]

    当图像是三通道的时候返回的是BGR三通道的值,如果是灰度图的话就返回一个亮度值

    同样的如果要对图像(x,y)处赋值的话,也通过这种方式来实现:

    #三通道
    img[x,y]=[255,255,255]
    #单通道
    img[x,y]=255

    2、获取图像属性

    获取图像的形式,这个跟numpy的操作基本一样,通过shape来获取:

    img.shape

    会返回一个图像的形态,也就是(行,列,通道),OpenCV的图像还有一个size属性,这个返回的是总的像素数量行*列*通道数。

    通过图像的dtype来获取图像的像素数据类型:

    img.dtype

    返回的值类型如uint8等

    3、图像ROI

    OpenCV获取图像的ROI的时候可以使用类似numpy的方式来获取,如:

    roi=img[r0:r1,c0:c1]

    4、通道分离和合并

    通道分离使用的是函数split:

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

    通道分离用的是merge函数:

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

    当可以不用split的时候就不要用,改用numpy的索引操作,因为split是比较耗时的操作。

    5、图像扩充边界

    扩充边界的时候就用函数copyMakeBorder(),这个函数有四个参数:

    1. src:输入图像

    2. top,bottom,left,right:对应的边界的像素数目

    3. borderType要添加哪种类型的边界

      1. cv2.BORDER_CONSTANT,添加有颜色的常数值边界,也就是下一个参数value;

      2. cv2.BORDER_REFLECT,边界颜色的镜像,fedcba|abcdefgh|hgfedcb;

      3. cv2.BORDER_REFLECT_101或者cv2.BORDER_DEFAULT,gfedcb|abcdefgh|gfedcba;

      4. cv2.BORDER_REPLICATE,重复最后一个像素来填充;

      5. cv2.BORDER_WRAP,这个比较...,应该是左移右移来填充吧,cdefgh| abcdefgh|abcdefg

    4. value:边界颜色

    import numpy as np
    import cv2 as cv
    
    src = cv.imread("D:/lena.bmp")
    
    src = cv.resize(src, (256, 256))
    dst = cv.copyMakeBorder(src, 50, 50, 50, 50, 
        cv.BORDER_CONSTANT, value=[255, 255, 255])
    cv.imshow('BORDER_CONSTANT', dst)
    
    src_gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY)
    
    dst = cv.copyMakeBorder(src, 50, 50, 50, 50, cv.BORDER_REFLECT)
    cv.imshow('BORDER_REFLECT', dst)
    
    dst = cv.copyMakeBorder(src, 50, 50, 50, 50, cv.BORDER_REFLECT_101)
    cv.imshow('BORDER_REFLECT_101', dst)
    
    dst = cv.copyMakeBorder(src, 50, 50, 50, 50, cv.BORDER_REPLICATE)
    cv.imshow('BORDER_REPLICATE', dst)
    
    dst = cv.copyMakeBorder(src, 50, 50, 50, 50, cv.BORDER_WRAP)
    cv.imshow('BORDER_WRAP', dst)
    cv.waitKey(0)
    cv.destroyAllWindows()

    天还未黑,云怎敢灰;

    雨还未下,风怎敢吹;

    瓜还未熟,秧怎敢枯;

    花还未落,树怎敢死;

    你还未嫁,我怎敢老。

    -- 汪国真 《怎敢》

    上善若水,为而不争。
  • 相关阅读:
    spoj 104 Highways (最小生成树计数)
    bzoj 1912 巡逻(树直径)
    BZOJ 3534 重建
    BZOJ 3143 游走(高斯消元)
    在Windows下编译PyCaffe
    caffe的Matlab接口的使用方法
    NewRelic性能监控之APM
    MariaDB-10.x二进制包安装
    mongoDB-3.x Balancer Management
    mongoDB-3.x集群管理
  • 原文地址:https://www.cnblogs.com/Bearoom/p/12489402.html
Copyright © 2020-2023  润新知