目录
二值图像的像素访问、修改
单个像素访问、修改
多个像素修改
彩色图像(三维数组) 像素访问、修改
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()
运行效果: