跟着贾志刚老师学习OpenCV
通过OpenCV的imread函数读取的图片,格式变为ndarry数组类型,因此可以通过遍历数组的方式,遍历、修改 图片的每个像素点的值。
import cv2 as cv
import numpy as np
def access_pixels(image):
'''解析'''
'''图片属性读取'''
print(image.shape)#图像的形状 #(750, 500, 3)
height=image.shape[0]#图像高
width=image.shape[1]#图像宽
chanels=image.shape[2]#图像通道数
print('宽度:{},高度:{},通道数:{}'.format(width,height,chanels))
'''图片像素点操作'''
for row in range(height):
for col in range(width):
for c in range(chanels):
pv=image[row,col,c]
image[row,col,c]=255-pv
cv.imshow('pixels_demo',image)
'''等同于上面的access_pixels函数,利用opencv内置的api进行像素的取反,速度更快,因为调用的是c写的,速度快'''
def inverse(image):
dst=cv.bitwise_not(image)
cv.imshow(dst)
def create_image():
''''''
'''创建图片:本例创建3通道RGB图片'''
img=np.zeros([400,400,3],np.uint8)
img[:,:,0]=np.ones([400,400])*255#某通道赋值
cv.imshow('new image',img)
src=cv.imread(r'D:\Project\Opencv\Learning01\angelababy.jpg')#opencv读取的图片格式变为numpy.ndarray类型
cv.namedWindow('input image',cv.WINDOW_AUTOSIZE)
cv.imshow('input image',src)#参数:名称,图片
t1=cv.getTickCount()#获取当前电脑的CPU时钟
access_pixels(src)
t2=cv.getTickCount()#获取当前电脑的CPU时钟
print('time:{}ms'.format((t2-t1)/cv.getTickFrequency()*1000))#获取执行时间
create_image()
cv.waitKey(0)
cv.destroyAllWindows()#销毁所有窗口
总结:
(1)衡量时间消耗的函数
t1=cv.getTickCount()
t2=cv.getTickCount()
(t2-t1)*1000 单位是毫秒
(2)OpenCV读取的图片是ndarray格式的数据,可以利用numpy对图像进行操作。