Numpy数组操作

1.遍历图片三个通道像素点,并修改相应的RGB

import cv2 as cv
import numpy as np

def access_pixels(image):     #遍历图像像素
    print(image.shape);
    height =  image.shape[0]
    width = image.shape[1]
    channels = image.shape[2]
    print("width : %s,height : %s,channels : %s"%(width,height,channels))
    for row in range(height):    #开始遍历
        for col in range(width):
            for c in range(channels):
                pv = image[row,col,c]  #获取每个像素点的每个通道的数值
                image[row,col,c] = 255 - pv  #灰度值是0-255   这里是修改每个像素点每个通道灰度值
    cv.imshow("pixels_demo",image)

src = cv.imread(r"C:\pics\beay.png")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
t1 = cv.getTickCount()   #该函数可得到从某一时刻到该函数的时钟周期数
creat_image()
t2 = cv.getTickCount()
time = (t2 - t1)/cv.getTickFrequency();#计算函数access_pixels经过的时间(cv.getTickFrequency()表示1s的时钟周期),可知遍历像素所带来的时间开销较大,耗费处理器资源
print("time : %s ms"%(time*1000))   #输出运行时间
cv.waitKey(0)

cv.destoryAllWindows()

在这里插入图片描述
下面代码与上面的作用一样

def inverse(image): # 完成与上个函数相同的功能
  dst = cv.bitwise_not(image) # 该函数是直接调用opencv库中的API,速度较自己遍历快许多许多,因为API调用的是C代码
  cv.imshow("New image", dst)

2.通过Numpy数组创建图像

import cv2 as cv
import numpy as np
def creat_image():    #通过numpy数组创建图像
    """
    img = np.zeros([400,400,3],np.uint8)    #创建400*400*3的数值为0的三维数组,相当于一个RGB图像
    img[: , : , 0] = np.ones([400,400])*255   #blue ,green,red  255表示程度,0-255程度由深至浅,因为np.ones()相当于创建的矩阵的数值为1,“:”默认表示所有,添上数字后可以表示赋值范围
    cv.imshow("new image",img)
    img = np.ones([400,400,1],np.uint8)   #创建400*400*1的数值为1的三维数组,相当于一个灰度图像,要注意写明通道数
    img = img * 127   #相当于img[:,:,0] = np.ones([400,400])*127
    cv.imshow("new image",img)    #显示灰色图像
    cv.imwrite("C:\pics\mypic.png",img)
    """
    m1 = np.ones([3,3],np.uint8)
    m1.fill(12222.388)   #填充
    print(m1)  #显示一个数值为12222.388的3*3矩阵
    
    m2 = m1.reshape([1,9])
    print(m2)
    
src = cv.imread(r"C:\pics\beay.png")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
t1 = cv.getTickCount()   #该函数可得到从某一时刻到该函数的时钟周期数
creat_image()
t2 = cv.getTickCount()
time = (t2 - t1)/cv.getTickFrequency();#计算函数access_pixels经过的时间(cv.getTickFrequency()表示1s的时钟周期),可知遍历像素所带来的时间开销较大,耗费处理器资源
print("time : %s ms"%(time*1000))
cv.waitKey(0)

cv.destoryAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值