【opencv-python 2】进行图像像素进行操作

用到的函数

t1 = cv.getTickCount() # 获取时间
(t2-t1)/cv.getTickFrequency() # 计算消耗的时间
cv.bitwise_not(image) # 像素取反
print(image.size) # 获取图像的尺寸信息
img = np.zeros([400,400,3],np.uint8) # 创建一个三通道的图像

因为python里面没有指针的操作,所以在对图像进行像素操作的时候,就无法使用指针。

在python-opencv里面,图像是一个Numpy数组的形式存储的,如何进行像素的读取和操作,请看下面的例子:

代码示例:

import cv2 as cv
import numpy as np

# 定义一个处理图像像素的函数
def acces_pixels(image):
    print(image.size)
    print(image.shape)
    height = image.shape[0]
    width = image.shape[1]
    channels = image.shape[2]
    print('height: %s, width: %s, channels: %s'%(height,width,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.bitwise_not就可以实现

    cv.imshow('result',image)


# 生成一个图像
def creat_image():

    #3 channels,
    img = np.zeros([400,400,3],np.uint8)
    img[:,:,2] = np.ones([400,400])*255 # BGR

    cv.imshow('new image',img)

    # 1 channels
    img1 = np.ones([400,400,1],np.uint8)
    img1 = img1*255
    cv.imshow('img1',img1)

# load a existed image
src = cv.imread('./images/demo.png')
cv.namedWindow('input image',cv.WINDOW_AUTOSIZE)
cv.imshow('input image',src)

t1 = cv.getTickCount()# 计时开始

creat_image()

t2 = cv.getTickCount()
print("time:",(t2-t1)/cv.getTickFrequency()) # 单位是秒

# pause
cv.waitKey(0)
cv.destroyAllWindows()

 

你可能感兴趣的:(opencv-python)