用到的函数
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()