Opencv+Python学习记录2:图像处理的基本操作——像素处理(代码示例)

本文详细介绍了如何使用Numpy和OpenCV进行像素级别的操作,包括二值图像和灰度图像的创建、访问与修改,以及彩色图像的通道处理和BGR模式的示例。通过实例演示了如何读取、修改像素值,展示了图像处理的基础技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

像素处理是昨天和今天学习的内容。

像素是图像构成的基本单位,像素处理是图像处理的基本操作,可以通过位置索引的形式对图像内的元素进行访问,处理。

一,二值图像和灰度图像

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()

输出如下:

2.读取一个灰度图像,并对其像素进行访问,修改 

# 读取一个灰度图像,并对其像素进行访问,修改
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()
# 因为此处我们没有灰度图像,故此处暂不执行

因为此处博主没有灰度图像,所以没有执行这个部分,感兴趣的朋友可以找灰度图像试一试。

二,彩色图像

1.使用Numpy生成三维数组,用来观察三个通道值的变化情况

# 使用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()

输出如下:

 2.使用Numpy生成一个三维数组,用来观察三个通道值的变化情况

# 使用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()

 输出如下:

3.使用Numpy生成一个三位数组,用来模拟一幅BGR模式的彩色图像,并对其进行访问,修改 

# 使用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])

输出如下:

 4.读取一幅彩色图像,并对其像素进行访问,修改

# 读取一幅彩色图像,并对其像素进行访问,修改
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()

输出如下:

这里用的是博主非常喜欢的《星月夜》的一角

 最后想说一下的是,代码中的注释部分可以好好看一下,个人感觉蛮重要的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值