赞
踩
像素处理是昨天和今天学习的内容。
像素是图像构成的基本单位,像素处理是图像处理的基本操作,可以通过位置索引的形式对图像内的元素进行访问,处理。
1.使用Numpy库生成一个元素值都是0的二维数组,用来模拟一幅黑色图像
- # 使用Numpy库生成一个元素值都是0的二维数组,用来模拟一幅黑色图像
- import cv2
- import numpy as np
- img=np.zeros((8,8),dtype=np.uint8)
- print("imag=\n",img)
- cv2.imshow("one",img)
- print("读取像素点img[0,3]=",img[0,3])
- img[0,3]=255
- print("修改后img=\n",img)
- print("读取修改后像素点img[0,3]=",img[0,3])
- cv2.imshow("two",img)
- cv2.waitKey()
- cv2.destoryAllWindows()
输出如下:
- # 读取一个灰度图像,并对其像素进行访问,修改
- import cv2
- img=cv2.imread("rainbow5.bmp",0)
- cv2.imshow("before",img)
- for i in range(10,100):
- for j in range(80,100):
- img[i,j]=255
- cv2.imshow("after",img)
- cv2.waitKey()
- cv2.destoryAllWindows()
- # 因为此处我们没有灰度图像,故此处暂不执行
因为此处博主没有灰度图像,所以没有执行这个部分,感兴趣的朋友可以找灰度图像试一试。
- # 使用Numpy生成三维数组,用来观察三个通道值的变化情况
- # 结果是生成三张图片,蓝色,绿色,红色
- import numpy as np
- import cv2
- # -----------------------蓝色通值道--------------
- blue=np.zeros((300,300,3),dtype=np.uint8)
- blue[:,:,0]=255
- print("blue=\n",blue)
- cv2.imshow("blue",blue)
- # -----------------------绿色通值道--------------
- green=np.zeros((300,300,3),dtype=np.uint8)
- green[:,:,1]=255
- print("green=\n",green)
- cv2.imshow("green",green)
- # -----------------------红色通值道--------------
- red=np.zeros((300,300,3),dtype=np.uint8)
- red[:,:,2]=255
- print("red=\n",red)
- cv2.imshow("red",red)
- # -----------------------释放窗口--------------
- cv2.waitKey()
- cv.destoryAllWindows()
输出如下:
- # 使用Numpy生成一个三维数组,用来观察三个通道值的变化情况
- # 生成一张三色图
- import numpy as np
- import cv2
- img=np.zeros((300,300,3),dtype=np.uint8)
- img[:,0:100,0]=255
- img[:,100:200,1]=255
- img[:,200:300,2]=255
- print("img=\n",img)
- cv2.imshow("img",img)
- cv2.waitKey()
- cv2.destoryAllWindows()
输出如下:
- # 使用Numpy生成一个三位数组,用来模拟一幅BGR模式的彩色图像,并对其进行访问,修改
- import numpy as np
- img=np.zeros((2,4,3),dtype=np.uint8)#利用zeros()生成一个2*4*3的数组,对应“2行4列3个通道”的BGR图像
- print("img=\n",img)# 打印图像当前的值
- print("读取像素点img[0,3]=",img[0,3])#访问第0行,第3列位置上的B通道,G通道,R通道三个像素点
- print("读取像素点img[1,2,2]=",img[1,2,2])#访问第1行,第2列第2个通道位置上的像素点
- img[0,3]=255# 修改img中第0行第3列位置上的像素值,三个通道的像素值都会被修改为255
- img[0,0]=[66,77,88]# 修改img中第0行第0列位置上的像素值,三个通道的像素值都会被修改为[66,77,88]
- img[1,1,1]=3# 修改img中第1行第1列第1个通道(G通道)位置上的像素值,将其修改为3
- img[1,2,2]=4# 修改img中第1行第2列第2个通道(R通道)位置上的像素值,将其修改为4
- img[0,2,0]=5# 修改img中第0行第2列第0个通道(B通道)位置上的像素值,将其修改为5
- # 最后两行使用print语句观察img和img[1,2,2]的值
- print("修改后img\n",img)
- print("读取修改后像素点img[1,2,2]=",img[1,2,2])
'运行
输出如下:
- # 读取一幅彩色图像,并对其像素进行访问,修改
- import cv2
- img=cv2.imread("moon.png")
- cv2.imshow("before",img)
- print("访问img[0,0]=",img[0,0])
- print("访问img[0,0,0]=",img[0,0,0])
- print("访问img[0,0,1]=",img[0,0,1])
- print("访问img[0,0,2]=",img[0,0,2])
- print("访问img[50,0]=",img[50,0])
- print("访问img[100,0]=",img[100,0])
- # 区域一 这一段代码对应图像左上角区域(即"第0行到第49行"与"第0列到第99列"的行列交叉区域,我们称之为区域一)
- for i in range(0,50):
- for j in range(0,100):
- for k in range(0,3):
- img[i,j,k]=255 #白色 借助img[i,j,k]=255的语句将该区域的三个通道的像素值都设置为255,让该区域变成白色
- # 区域二 这一段代码对应区域一正下方区域(即"第50行到第99行"与"第0列到第99列"的行列交叉区域,我们称之为区域二)
- for i in range(50,100):
- for j in range(0,100):
- img[i,j]=[128,128,128]# 灰色 借助img[i,j]=[128,128,128]的语句将该区域的三个通道的像素值都设置为128,让该区域变成灰色
- # 区域三 这一段代码对应区域一正下方区域(即"第100行到第149行"与"第0列到第99列"的行列交叉区域,我们称之为区域三)
- for i in range(100,150):
- for j in range(0,100):
- img[i,j]=0 #黑色 借助img[i,j]=0的语句将该区域的三个通道的像素值都设置为0,让该区域变成黑色
- cv2.imshow("after",img)
- print("修改后img[0,0]=",img[0,0])
- print("修改后img[0,0,0]=",img[0,0,0])
- print("修改后img[0,0,1]=",img[0,0,1])
- print("修改后img[0,0,2]=",img[0,0,2])
- print("修改后img[50,0]=",img[50,0])
- print("修改后img[100,0]=",img[100,0])
- cv2.waitKey()
- cv2.destroyAllWindows()
输出如下:
这里用的是博主非常喜欢的《星月夜》的一角
最后想说一下的是,代码中的注释部分可以好好看一下,个人感觉蛮重要的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。