Opencv+Python图像像素处理

目录

二值图像的像素访问、修改

单个像素访问、修改

 多个像素修改

彩色图像(三维数组) 像素访问、修改

BGR模式 像素访问、修改


二值图像的像素访问、修改

单个像素访问、修改

import numpy as np
import cv2 as cv
# 使用Numpy库中的函数zeros()可以生成一个元素值都是0的数组
img = np.zeros((8,8), np.uint8)
print(img)
print("读取像素点img[0,3]=",img[0,3])
img[0,3]=255
print("修改后Img=\n",img);
print("读取修改后像素点img[0,3]=",img[0,3])
cv.imshow("test",img)
cv.waitKey(-1)
# 销毁所有窗口
cv.destroyAllWindows()

打印结果: 

 多个像素修改

import numpy as np
import cv2 as cv
# 使用Numpy库中的函数zeros()可以生成一个元素值都是0的数组
img = np.zeros((100,100), np.uint8)
#print(img)
#高度h 50到60 宽度w 40到45 的矩形区域
print("读取像素点img[50:60,40:45]=\n",img[50:60,40:45])
img[50:60,40:45]=255
print("修改后Img=\n",img);
print("读取修改后像素点img[50:60,40:45]=\n",img[50:60,40:45])
cv.imshow("test",img)
cv.waitKey(-1)
# 销毁所有窗口
cv.destroyAllWindows()

运行结果: 

彩色图像(三维数组) 像素访问、修改

BGR模式 像素访问、修改

# 使用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(-1)
# 销毁所有窗口
cv2.destroyAllWindows()

运行效果:

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
cv2.imshow("img",img)
cv2.waitKey(-1)
# 销毁所有窗口
cv2.destroyAllWindows()

 

 对于三维数组(BGR模式)

img[0,3]=255

表示 第1行(h)第3列(w)位置上的像素值,三个通道的像素值被修改为255

img[0,3]=[66,77,88] 

表示 第1行(h)第3列(w)位置上的像素值,三个通道BGR的像素值分别被修改为66,77,88

img[0,3,0]=255

表示 第1行(h)第3列(w)位置上的像素值,B通道的像素值分别被修改为255

img[0,3,1]=255

表示 第1行(h)第3列(w)位置上的像素值,G通道的像素值分别被修改为255

img[0,3,2]=255

表示 第1行(h)第3列(w)位置上的像素值,R通道的像素值分别被修改为255

色彩通道提取

 split() 函数可以进行颜色的通道提取

import cv2 as cv
#解决中文乱码
def zh_ch(string):
    return string.encode('gbk').decode(errors='ignore')
img = cv.imread("test1.jpg")
#颜色的通道提取
b,g,r = cv.split(img)
print (r) #打印为二维数组
cv.imshow(zh_ch('原始图像'),img)
imgBlue = cv.imread("test1.jpg")
imgGreen = cv.imread("test1.jpg")
imgRed = cv.imread("test1.jpg")
#只保留B通道的图像
imgBlue[:,:,1] = 0
imgBlue[:,:,2] = 0
cv.imshow('Blue', imgBlue)
#只保留G通道的图像
imgGreen[:,:,0] = 0
imgGreen[:,:,2] = 0
cv.imshow('Green', imgGreen)
#只保留R通道的图像
imgRed[:,:,0] = 0
imgRed[:,:,1] = 0
cv.imshow('Red', imgRed)
cv.waitKey(-1)
cv.destroyAllWindows()

运行效果:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值