像素的访问与修改
准备工作:导包
import cv2 as cv
#数值计算扩展工具,用来存储和处理大型多维矩阵
import numpy as np
- 准备一张图
src=cv.imread("C:/Users/admin/Pictures/zyl/Tes1.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
- 方法
#图片中像素访问
def access_pixels(image):
print(image.shape)
height=image.shape[0]#图片垂直尺寸
width=image.shape[1]#图片水平尺寸
channels=image.shape[2]#图片通道数
#把获取的尺寸输出来看
print("width:%d,height:%d,channels:%d" %(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.imshow("pixels_demo",image)
- 显示
access_pixels(src)#显示
t1=cv.getTickCount()#用于返回从操作系统启动到当前所经的计时周期数
t2=cv.getTickCount()
time=(t2-t1)/cv.getTickCount()
#执行时间显示
print('time:%d' %(time+1000))
创建一个rgb颜色的通道
def create_fmage():
#zeros来创建一个空数组([h,w,3通道],通道的8位图像(np的数据类型))
img=np.zeros([400,400,3], np.uint8)
#用ones给zeros赋值
img[: ,: ,0]=np.ones([400,400])*255#蓝
#img[: ,: ,1]=np.ones([400,400])*255#绿
#img[: ,: ,2]=np.ones([400,400])*255#红
#创建一个单通道图像
imgs=np.zeros([400,400,1],np.uint8)
imgs[:,:,0]=np.ones([400,400])*127#灰色
#用ones直接创建通道,比较简单灵活
imge=np.ones([400,400,1],np.uint8)
imge*=0#黑色
#显示
cv.imshow("new image",img)
cv.imshow("new image",imgs)
cv.imshow("new image",imge)
#保存图像
cv.imwrite("C:/Users/admin/Pictures/zyl/zhuanhuan/test2.png",imge)
二维的数组转换成一维表示
#用ones生成二维数组
m1=np.ones([3,3],np.uint8)#3*3列的数组
m1.fill(122.388)#生成数字是122的3行3列
print(m1)#显示
m2= m1.reshape([1,9])#转换成一维(一行)
print(m2)#显示
#用数组生成二维数组
m3=np.array([[1,2,3],[4,5,6],[7,8,9],[7,8,9]],np.int32)
m3.fill(9)#生成数字是9的4行3列
print(m3)
提高修改数组中像素点的值的速度
src=cv.imread("C:/Users/admin/Pictures/zyl/Tes1.jpg")#读取图片
#cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)#新建打开窗体和类型
#cv.imshow("input image",src)#显示打开窗体图片
#修改数组中像素点的值
def inverse(image):
dst=cv.bitwise_not(image)
cv.imshow("inverse demo",dst)
inverse(src)#调用