Open CV系列学习笔记(二)Numpy数组操作 2021-01-27

Open CV系列学习笔记(二)Numpy数组操作

在这里插入图片描述

遍历图片中的像素点对其修改

首先获取图片的的宽(width)高(height)和通道数(channels),遍历每个像素点,对其修改。

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
    cv.imshow("pixels_demo",image)

print("--------Hellow Python-------")
src = cv.imread("E:/picture/10.bmp")#修改为自己的图片地址
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
t1 = cv.getTickCount()
access_pixels(src)
t2 = cv.getTickCount()
time = (t2 - t1)/cv.getTickFrequency();#计算运行时间
print("time : %s ms"%(time*1000))
cv.waitKey(0)

cv.destroyAllWindows()

t1 = cv.getTickCount()用来获取电脑cpu时钟,计算运行代码所用的时间。
运行效果:
在这里插入图片描述

--------Hellow Python-------
(331, 356, 3)
width : 356, height : 331, channels : 3
time : 424.8318 ms
可以看到,遍历一幅331*356,的彩图花费的时间为424.8318ms(我的电脑是i7)感觉还是太慢。
可以调用Opencv中自带的像素取反api,效果同上

import cv2 as cv
import numpy as np

def inverse(image):#同上函数 但更快
    dst = cv.bitwise_not(image)
    cv.imshow("inverse demo",dst)

print("--------Hellow Python-------")
src = cv.imread("E:/picture/01.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
t1 = cv.getTickCount()
inverse(src)
t2 = cv.getTickCount()
time = (t2 - t1)/cv.getTickFrequency();
print("time : %s ms"%(time*1000))
cv.waitKey(0)

运行结果:
在这里插入图片描述
--------Hellow Python-------
time : 15.8474 ms

对指定的数组赋值

import cv2 as cv
import numpy as np

def create_image():#对指定的数组赋值(BGR)
    #创建多通道赋值
    """img = np.zeros([400,400,3],np.uint8)
    #img[:,:,0] = np.ones([400,400])*255
    img[:,:,2] = np.ones([400, 400]) * 255
    cv.imshow("new image",img)
    #单通道,(图像初始化)
    img = np.ones([400,400,1],np.uint8)
    img = img*0
    cv.imshow("new image",img)
    cv.imwrite("./myImage.png",img)"""
    m1 = np.ones([3,3],np.uint8)
    m1.fill(122.388)
    print(m1)

    m2 = m1.reshape([1,9])
    print(m2)

    m3 = np.array([[2,4,3],[4,5,6],[7,8,9]],np.int32)
    m3.fill(9)
    print(m3)
print("--------Hellow Python-------")
src = cv.imread("E:/picture/01.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
t1 = cv.getTickCount()
create_image()
t2 = cv.getTickCount()
time = (t2 - t1)/cv.getTickFrequency();
print("time : %s ms"%(time*1000))
cv.waitKey(0)

cv.destroyAllWindows()

结果输出:
--------Hellow Python-------
[[122 122 122]
[122 122 122]
[122 122 122]]
[[122 122 122 122 122 122 122 122 122]]
[[9 9 9]
[9 9 9]
[9 9 9]]
time : 0.6471 ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值